#javascript #html #jquery #css
Вопрос:
Я пытаюсь создать кнопку переключения. Вот код: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_switch
В моем коде javascript — я прочитал значение «флажок». Если значение равно true, то я добавляю еще один div, и у этого другого div также есть кнопка закрытия. Когда нажата кнопка закрытия, я удаляю этот недавно добавленный div из dom.
Пока все это работает нормально.
Я также хочу переключить кнопку назад. Я устанавливаю значение false в следующей строке:
document.getElementsByName("addUserConfirmation").checked = false;
Он действительно устанавливает значение false, но кнопка переключения по-прежнему остается синей. Как мне снова отключить его?
Вот фрагмент кода:
function removeCardRevertToggleButton(button, container) {
var parentContainer = document.getElementById(container);
jQuery(parentContainer).children().remove();
document.getElementsByName("addConfirmation").checked = false;
}
<div class="boxStyle">
<span class="closeButton" requestid="" onclick="removeCardRevertToggleButton(this, amp;quot;inviteContainerContextamp;quot;)">×</span>
</div>
Вот jsfiddle:
https://jsfiddle.net/u9y2w8ev/15/
Когда нажата кнопка «Закрыть» («x»), я хочу переключить переключатель в положение » выкл.».
Комментарии:
1. похоже, это как-то связано с тем, что CSS не обновляется, хотя значение изменилось.
2. Да, я думаю, что он использует». слайдер:до». Как мне установить псевдоэлемент. Как мне вернуть его обратно?
3. Если нет особой ситуации, требующей использования Javascript, я могу только рекомендовать вам сделать это с помощью CSS. codepen.io/iamturner/pen/xVezWr
4. можете ли вы поделиться jsfiddle или codepen или чем-нибудь, что я мог бы отладить и помочь вам с запросом? В идеале это должно работать именно так w3schools.com/howto/tryit.asp?filename=tryhow_css_switch , если весь код идеально добавлен 🙂
5. Обновил свой пост ссылкой на jsfiddle.
Ответ №1:
document.getElementsByName("addConfirmation")
возвращает массив (элементы). Вам нужно получить доступ к элементу массива, подобному этому document.getElementsByName("addUserConfirmation")[0].checked
function removeCardRevertToggleButton(button) {
document.getElementsByName("addUserConfirmation")[0].checked = false;
}
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked .slider {
background-color: #2196F3;
}
input:focus .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
<body>
<label class="switch">
<input type="checkbox" name="addUserConfirmation" checked>
<span class="slider round"></span>
</label>
<div class="boxStyle">
<span class="closeButton" onclick='removeCardRevertToggleButton(this)'>×
</span>
</div>
</body>
Ответ №2:
Я обновил скрипку как https://jsfiddle.net/k086xnpd/
HTML Code:
<body>
<label class="switch">
<input type="checkbox" id="test" name="addUserConfirmation" checked>
<span class="slider round"></span>
</label>
<div class="boxStyle">
<span class="closeButton" onclick='removeCardRevertToggleButton(this)'>×
</span>
</div>
</body>
JS Code:
function removeCardRevertToggleButton(button) {
alert("Clicked, new value = " button.checked);
//var parentContainer = document.getElementById(container);
//jQuery(parentContainer).children().remove();
document.getElementById("test").checked = false;
document.getElementById("test").addClass('slider:before');
}
Надеюсь, это то, что вы искали 🙂