jQuery: событие изменения состояния чекбокса (checked state)
Я хочу, чтобы событие срабатывало на стороне клиента, когда checkbox отмечается или снимается с отметки:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Выполняем действия
}
});
В общем, я хочу, чтобы это происходило для каждого checkbox на странице. Является ли этот метод, основанный на событии клика и проверке состояния, приемлемым?
Мне кажется, что должен быть более элегантный способ с использованием jQuery. Есть ли у кого-то решение?
5 ответ(ов)
Вот еще одно решение на jQuery для отслеживания изменения состояния чекбокса:
$('.checkbox_class').on('change', function() { // при изменении состояния
if (this.checked) { // если состояние "CHECKED"
// здесь выполняйте вашу логику
}
});
В этом коде мы используем метод on()
для добавления обработчика события change
к элементам с классом checkbox_class
. Когда чекбокс изменяет свое состояние на "выбран", выполняется код внутри блока if
. Вы можете добавить любую необходимую логику в этот блок.
Если ваша цель — прикрепить событие только к отмеченным чекбоксам (чтобы оно срабатывало, когда они будут сняты и снова отмечены), то вам нужно использовать следующий код:
$(function() {
$("input[type='checkbox']:checked").change(function() {
// ваш код здесь
});
});
Если же вы хотите прикрепить событие ко всем чекбоксам (как отмеченным, так и неотмеченным), то вам подойдет следующий вариант:
$(function() {
$("input[type='checkbox']").change(function() {
// ваш код здесь
});
});
Если же вам необходимо, чтобы событие срабатывало только при установке отметки (то есть, когда чекбокс становится отмеченным из неотмеченного состояния), то следует обратиться к ответу @James Allardice выше.
Кстати, input[type='checkbox']:checked
— это CSS-селектор.
Это очень просто, вот как я это делаю:
JQuery:
$(document).on('change', '[name="nameOfCheckboxes[]"]', function() {
var checkbox = $(this), // Выбранный или текущий чекбокс
value = checkbox.val(); // Значение чекбокса
if (checkbox.is(':checked')) {
console.log('выбран');
} else {
console.log('не выбран');
}
});
С уважением!
В вашем коде используется jQuery для установки обработчика события change
на элемент input
с идентификатором chkproperty
. При изменении значения этого элемента будет отображаться окно с его текуще значением.
Вот что делает каждая часть:
$(document).ready(function () { ... });
— это гарантирует, что код внутри будет выполнен только после полной загрузки DOM-дерева. Это помогает избежать ошибок, связанных с попыткой обращения к элементам, которые еще не существуют на странице.$(document).on('change', 'input[Id="chkproperty"]', function (e) { ... });
— этот код устанавливает делегированный обработчик событияchange
для всех элементовinput
с атрибутомId
, равнымchkproperty
. Это означает, что обработчик будет работать для всех таких элементов, даже если они добавлены на страницу динамически после первоначальной загрузки.alert($(this).val());
— внутри функции обработчика событияchange
используется$(this).val()
для получения текущего значения изменяющегося элементаinput
, после чего оно отображается в виде всплывающего окна.
Если у вас есть дополнительные вопросы или если что-то не работает как ожидалось, не стесняйтесь спрашивать!
Это можно сделать следующим образом. При нажатии на чекбокс элемент с идентификатором #checkbox будет скрыт или, наоборот, показан.
<script>
$('#checkbox').on('click', function() {
if (this.checked) {
$('#checkbox').hide();
} else {
$('#checkbox').show();
}
});
</script>
Таким образом, если чекбокс отмечен, элемент с идентификатором #checkbox будет скрыт; если он не отмечен, элемент будет показан.
event.preventDefault() против return false: в чем разница?
Изменение и обработка событий клика для чекбоксов с помощью jQuery
Прокрутка к элементу с использованием jQuery
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как определить нажатие клавиши Esc?