Я хочу, чтобы событие запускалось на стороне клиента, когда флажок установлен / снят:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
По сути, я хочу, чтобы это происходило с каждым флажком на странице. Этот метод стрельбы по нажатию и проверки состояния в порядке?
Я думаю, что должен быть более чистый способ JQuery. Кто-нибудь знает решение?
javascript
jquery
event-handling
Anonymouse
источник
источник
Ответы:
Привязать к
change
событию вместоclick
. Тем не менее, вам, вероятно, все еще нужно будет проверить, установлен ли флажок:Основное преимущество привязки кОтредактировано в комментарияхchange
событию надclick
событием заключается в том, что не все щелчки по флажку приведут к его изменению состояния. Если вы хотите захватывать только события, которые приводят к изменению состояния флажка, вам нужноchange
событие с точным именем .Также обратите внимание, что я использовал
this.checked
вместо того, чтобы обернуть элемент в объект jQuery и использовать методы jQuery, просто потому что он короче и быстрее для доступа к свойству элемента DOM напрямую.Изменить (см. Комментарии)
Чтобы получить все флажки у вас есть несколько вариантов. Вы можете использовать
:checkbox
псевдо-селектор:Или вы можете использовать атрибут равный селектор:
источник
$(this).is(':checked')
. Я подумал, что вам нужно использовать этоchange
событие, если вы хотите обнаружить изменения с клавиатуры (вкладки, пробелы), но, что удивительно,click
также обнаруживает изменения, которые происходят не щелчком мыши, не уверен, что это jQuery, jsfiddle.net / mendesjuan / E39szclick
,change
или что - то для всех флажков на странице может вызвать проблемы с производительностью (depepending на сумму флажков). Попробуйте связать с родительским элементом или документом и захватить$('form').on('change', ':checkbox', function(){ //stuff });
Если в будущем у вас возникнут трудности, если вы добавляете флажки динамически, правильный принятый ответ не будет работать. Вам нужно будет использовать делегирование событий, которое позволяет родительскому узлу захватывать всплывающие события от определенного потомка и выполнять обратный вызов.
Обратите внимание, что почти всегда нет необходимости использовать
document
родительский селектор. Вместо этого выберите более конкретный родительский узел, чтобы предотвратить распространение события на слишком большое количество уровней.В приведенном ниже примере показано, как события динамически добавляемых dom-узлов не вызывают ранее определенных слушателей.
Хотя в этом примере показано использование делегирования событий для захвата событий для определенного узла (
h1
в данном случае) и выдачи обратного вызова для таких событий.источник
Просто другое решение
источник
Если вы намереваетесь прикрепить событие только к отмеченным флажкам (чтобы оно срабатывало, если они не проверены и проверены позже), это то, что вам нужно.
если вы намереваетесь прикрепить событие ко всем флажкам (отмечено и не отмечено)
если вы хотите, чтобы он срабатывал только тогда, когда они проверены (не проверены), тогда @James Allardice ответит выше.
Кстати
input[type='checkbox']:checked
, CSS-селектор.источник
$("input[type='checkbox']:not(:checked)")
источник
источник
возможно, это может быть альтернативой для вас.
источник
Это решение найти, если флажок установлен или нет. Используйте функцию #prop () //
источник
Попробуйте эту проверку JQuery
источник
Это очень просто, вот как я использую:
JQuery:
С уважением!
источник