Установіть / зніміть прапорець у JavaScript (jQuery чи ваніль)?


Відповіді:


975

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);

Використання .prop, здається, не працює з Jquery 1.11.2 в Firefox з локально розміщеними файлами. .attr робить. Я не перевіряв більш повно. Ось код: `` `personContent.find (" [data-name = '"+ pass.name +"'] "). Children ('input'). Attr ('перевірено', правда); `` `
Ендрю Даунес

3
Чи варто скористатися attrабо prop?
Чорний

15
Мабуть, .checked = true/falseце не викликає changeподії: - \
лист

1
@albert: чому ти змінив завдання на строгі тести на рівність? Ви зламали відповідь.
Martijn Pieters

ти правий. це зовсім моє погано. вибачте з цього приводу
Альберт

136

Важлива поведінка, про яку ще не було сказано:

Програмна установка перевіряється атрибут, не згоріти 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


8
Це гарна відповідь, але особисто я вважаю за краще запустити подію зміни, а не викликати click () elm.dispatchEvent(new Event('change'));
Віктор Шароватов

@VictorSharovatov Чому ви віддаєте перевагу події зміни?
PeterCo

2
Я можу погодитися лише частково - багато веб-браузерів з AdBlocks захищають DOM від віртуального клацання () через небажані дії з реклами
pkolawa

2
@PeterCo: Можливо, тому, що він більш чітко зображує наміри - клацніть елемент, щоб запустити подію зміни проти відправки на зміну події, щоб запустити подію зміни - непряму (тригери натискання зміни) проти прямого. Останнє значно чіткіше і не вимагає від читача знати, що натискання викликає зміни.
Білл

37

перевіряти:

document.getElementById("id-of-checkbox").checked = true;

зняти прапорець:

document.getElementById("id-of-checkbox").checked = false;

2
Це змінило б лише перевірений атрибут. Однак onclick та подібні події не будуть спровоковані.
Пол Стеліан

16

Ми можемо встановити прапорці для твердих часток як,

$('id of the checkbox')[0].checked = true

і зніміть прапорець біля,

$('id of the checkbox')[0].checked = false

1
Індекс масиву вам дійсно не потрібен, якщо ви вибираєте лише один елемент. Але я думаю, якщо ви хочете бути явними. ха-ха
Різовські

6
@Rizowski Вам потрібен індекс, щоб отримати власний html-елемент - об’єкти jQuery не мають "перевіреного" властивості
Генрік Крістенсен

Це працювало на мене. Без індексу масиву я отримував невизначену помилку. Дуже дякую, врятував мені день.
Нері

15

Я хотів би зазначити, що встановлення атрибута 'check' на не порожній рядок призводить до встановленого прапорця.

Тож якщо ви встановите атрибут 'check' на «false» , прапорець буде встановлений. Мені довелося встановити значення порожнім рядком, null або булевим значенням false , щоб переконатися, що прапорець не встановлений.


5
Це тому, що не порожня рядок вважається правдою.
Джеймс Койл


6
<script type="text/javascript">
    $(document).ready(function () {
        $('.selecctall').click(function (event) {
            if (this.checked) {
                $('.checkbox1').each(function () {
                    this.checked = true;
                });
            } else {
                $('.checkbox1').each(function () {
                    this.checked = false;
                });
            }
        });

    });

</script>


3

Якщо з якоїсь - то причини, ви не хочете (або не може) запустити .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 для стислості / простоти, але це може бути легко розроблено для того, щоб якийсь ідентифікатор передав конструктору, або він міг застосуватись до всіх кнопок, які діють як арії-мітки для прапорця (зауважте, що я не переймався встановленням ідентифікатора на кнопці та наданням прапорця арії з міткою, що слід зробити, якщо використовувати цей метод) або будь-якої кількості інших способів розширити цей спосіб. Останні два addEventListeners - це просто демонструвати, як це працює.


2

Для однієї перевірки спробуйте

myCheckBox.checked=1
<input type="checkbox" id="myCheckBox"> Call to her

для багатопробних


2

Я погоджуюся з поточними відповідями, але в моєму випадку це не працює, сподіваюся, що цей код комусь допоможе в майбутньому:

// check
$('#checkbox_id').click()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.