Является ли ошибкой изменение состояния флажка до срабатывания обработчика события click?
Отвечая на другой вопрос, я столкнулся с чем-то, что, на мой взгляд, было очень странным, и мне интересно, следует ли это считать ошибкой или это где-то в спецификации.
Такое поведение можно наблюдать на этом jsFiddle.
Учитывая следующий элемент флажка ввода:
<input type="checkbox" id="check" />
Если вы примените следующий обработчик события click (мы будем использовать jQuery здесь, чтобы сделать пример кратким):
$('#check').on('click', function (e) {
console.log(this.checked);
return false; //This prevents the default action from occurring.
});
Вы увидите в консоли разработчика:
true
Здесь на самом деле происходит то, что состояние флажка изменяется до того, как оно входит в обработчик события click. Однако, если обработчик события click предотвращает действие по умолчанию, состояние флажка возвращается.
Это похоже на ошибку для меня. Я ожидаю, что состояние флажка будет обновляться только после обработчика события click, если действие по умолчанию не предотвращено.
Это ошибка? Об этом следует сообщать различным дистрибьюторам браузеров?
(Я только проверял это в Chrome в настоящее время)
1 ответ
Я не верю, что это ошибка, но если вы подумаете об этом на секунду, то вполне понятно, почему вывод консоли True
При первом щелчке флажка значение устанавливается равным true. Он устанавливается только в ложное ПОСЛЕ того, как вы печатаете на консоль через return false;
заявление. Поэтому независимо от того, сколько раз вы пытаетесь это сделать, на выходе всегда будет True