Является ли ошибкой изменение состояния флажка до срабатывания обработчика события 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

Другие вопросы по тегам