Як можна встановити / зняти прапорець за допомогою JavaScript, jQuery або ванілі?
Як можна встановити / зняти прапорець за допомогою JavaScript, jQuery або ванілі?
Відповіді:
Javascript:
// Check
document.getElementById("checkbox").checked = true;
// Uncheck
document.getElementById("checkbox").checked = false;
jQuery (1.6+):
// Check
$("#checkbox").prop("checked", true);
// Uncheck
$("#checkbox").prop("checked", false);
jQuery (1,5-):
// Check
$("#checkbox").attr("checked", true);
// Uncheck
$("#checkbox").attr("checked", false);
attr
або prop
?
.checked = true/false
це не викликає change
події: - \
Важлива поведінка, про яку ще не було сказано:
Програмна установка перевіряється атрибут, не згоріти change
подія прапорця .
Побачте самі у цьому загадку:
http://jsfiddle.net/fjaeger/L9z9t04p/4/
(Fiddle тестується в Chrome 46, Firefox 41 та IE 11)
click()
методЯкось у вас може виникнути написання коду, який покладається на звільнення події. Щоб переконатися, що подія запускається, викличте click()
метод елемента прапорця таким чином:
document.getElementById('checkbox').click();
Однак це перемикає встановлений прапорець, замість того, щоб спеціально встановлювати його true
або false
. Пам'ятайте, що change
подія має розпочатися лише тоді, коли перевірений атрибут насправді зміниться.
Це також стосується способу jQuery: встановлення атрибуту за допомогою prop
або attr
, не викликає change
події.
checked
певного значенняВи можете протестувати checked
атрибут, перш ніж викликати click()
метод. Приклад:
function toggle(checked) {
var elm = document.getElementById('checkbox');
if (checked != elm.checked) {
elm.click();
}
}
Детальніше про спосіб кліку читайте тут:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
elm.dispatchEvent(new Event('change'));
перевіряти:
document.getElementById("id-of-checkbox").checked = true;
зняти прапорець:
document.getElementById("id-of-checkbox").checked = false;
Ми можемо встановити прапорці для твердих часток як,
$('id of the checkbox')[0].checked = true
і зніміть прапорець біля,
$('id of the checkbox')[0].checked = false
Я хотів би зазначити, що встановлення атрибута 'check' на не порожній рядок призводить до встановленого прапорця.
Тож якщо ви встановите атрибут 'check' на «false» , прапорець буде встановлений. Мені довелося встановити значення порожнім рядком, null або булевим значенням false , щоб переконатися, що прапорець не встановлений.
Спробуйте це:
//Check
document.getElementById('checkbox').setAttribute('checked', 'checked');
//UnCheck
document.getElementById('chk').removeAttribute('checked');
Якщо з якоїсь - то причини, ви не хочете (або не може) запустити .click()
на прапорці елемента, ви можете просто змінити його значення безпосередньо через його .Checked властивості ( атрибута IDL в <input type="checkbox">
).
Зауважте, що це не запускає звичайно пов’язану подію ( зміну ), тому вам потрібно буде вручну запустити її, щоб мати повне рішення, яке працює з будь-якими пов'язаними обробниками подій.
Ось функціональний приклад у необробленому javascript (ES6):
class ButtonCheck {
constructor() {
let ourCheckBox = null;
this.ourCheckBox = document.querySelector('#checkboxID');
let checkBoxButton = null;
this.checkBoxButton = document.querySelector('#checkboxID+button[aria-label="checkboxID"]');
let checkEvent = new Event('change');
this.checkBoxButton.addEventListener('click', function() {
let checkBox = this.ourCheckBox;
//toggle the checkbox: invert its state!
checkBox.checked = !checkBox.checked;
//let other things know the checkbox changed
checkBox.dispatchEvent(checkEvent);
}.bind(this), true);
this.eventHandler = function(e) {
document.querySelector('.checkboxfeedback').insertAdjacentHTML('beforeend', '<br />Event occurred on checkbox! Type: ' + e.type + ' checkbox state now: ' + this.ourCheckBox.checked);
}
//demonstration: we will see change events regardless of whether the checkbox is clicked or the button
this.ourCheckBox.addEventListener('change', function(e) {
this.eventHandler(e);
}.bind(this), true);
//demonstration: if we bind a click handler only to the checkbox, we only see clicks from the checkbox
this.ourCheckBox.addEventListener('click', function(e) {
this.eventHandler(e);
}.bind(this), true);
}
}
var init = function() {
const checkIt = new ButtonCheck();
}
if (document.readyState != 'loading') {
init;
} else {
document.addEventListener('DOMContentLoaded', init);
}
<input type="checkbox" id="checkboxID" />
<button aria-label="checkboxID">Change the checkbox!</button>
<div class="checkboxfeedback">No changes yet!</div>
Якщо запустити це і натиснути і прапорець, і кнопку, ви маєте зрозуміти, як це працює.
Зауважте, що я використовував document.querySelector для стислості / простоти, але це може бути легко розроблено для того, щоб якийсь ідентифікатор передав конструктору, або він міг застосуватись до всіх кнопок, які діють як арії-мітки для прапорця (зауважте, що я не переймався встановленням ідентифікатора на кнопці та наданням прапорця арії з міткою, що слід зробити, якщо використовувати цей метод) або будь-якої кількості інших способів розширити цей спосіб. Останні два addEventListener
s - це просто демонструвати, як це працює.
Для однієї перевірки спробуйте
для багатопробних
Я погоджуюся з поточними відповідями, але в моєму випадку це не працює, сподіваюся, що цей код комусь допоможе в майбутньому:
// check
$('#checkbox_id').click()