jQuery, флажки и .is (": флажок") - PullRequest
       82

jQuery, флажки и .is (": флажок")

84 голосов
/ 18 апреля 2010

Когда я привязываю функцию к элементу флажка, например:

$("#myCheckbox").click( function() {
    alert($(this).is(":checked"));
});

Флажок изменяет свой проверенный атрибут до , когда событие инициируется, это нормальное поведение и дает обратный результат.

Однако, когда я делаю:

$("#myCheckbox").click();

Флажок изменяет проверенный атрибут после событие инициируется.

У меня вопрос: есть ли способ вызвать событие click из jQuery, как при обычном щелчке (первый сценарий)?

PS: я уже пробовал с trigger('click');

Ответы [ 13 ]

0 голосов
/ 27 января 2014
if ($.browser.msie) {
    $("#myCheckbox").click(function() { $(this).trigger('change'); });
}

$("#myCheckbox").change(function() {
        alert($(this).is(":checked"));
    });
0 голосов
/ 04 июня 2012

В дополнение к ответу Ника Крейвера, для правильной работы на IE 8 необходимо добавить дополнительный обработчик кликов к флажку:

// needed for IE 8 compatibility
if ($.browser.msie)
    $("#myCheckbox").click(function() { $(this).trigger('change'); });

$("#myCheckbox").change( function() {
    alert($(this).is(":checked"));
});

//Trigger by:
$("#myCheckbox").trigger('click').trigger('change');

В противном случае обратный вызов будет срабатывать только тогда, когда флажок теряет фокус, так как IE 8 сохраняет фокус на флажках и радиоприемниках при нажатии.

Хотя не тестировался на IE 9.

0 голосов
/ 18 апреля 2010

Ну, чтобы соответствовать первому сценарию, это то, что я придумал.

http://jsbin.com/uwupa/edit

По сути, вместо привязки события «click» вы связываете событие «change» с предупреждением.

Затем, когда вы запускаете событие, сначала вы запускаете щелчок, а затем запускаете изменение.

...