Ответ 1
Поскольку событие click
отличается от события change
, в котором изменяется элемент. Когда <div>
выполняет .click()
, запускает событие click
, которое еще не изменило состояние флажка, поэтому, когда он его проверяет, он находится в предыдущем состоянии.
Когда вы нажимаете непосредственно на <input>
, вы уже изменили состояние, даже если событие change
срабатывает 2-го порядка, основная точка - это статус флажка checked
изменился, до click
обработчик проверяет его, поэтому текущее состояние.
Если вы хотите получить точную информацию о состоянии и активировать событие change
, например:
$(function() {
$('input').change(function() {
$("span").append("<br />" + (this.checked ? "Checked" : "Uncecked"));
});
$('div').click(function() {
$('input').click().change();
});
});
Здесь вы можете попробовать здесь, по случайности это не вопрос поведения, и вы хотите получить внешний clickable area, так я бы сделал это (через <label>
обертывание ввода).