Флажки проверяются еще до вызова обработчика кликов - PullRequest
2 голосов
/ 13 ноября 2011

У меня есть следующие фрагменты: http://jsfiddle.net/L7rne/5/ и http://jsfiddle.net/L7rne/6/

Оказывается, что если вы приостановите выполнение скрипта в обработчике события click, то флажок будет установлен, даже еслиесть event.preventDefault().

Я пробовал это в Firefox 7 и Chrome 15, и оба ведут себя одинаково.

Я почти уверен, что это правильное поведение, но каким-то образом я не могу найтилюбая ссылка, почему это так.

Может ли кто-нибудь указать мне правильное направление?

РЕДАКТИРОВАТЬ:

Когда вы начинаете с отмеченными флажками, это становится еще интереснее: http://jsfiddle.net/L7rne/8/ -флажок снимается, но его значение остается флажок http://jsfiddle.net/L7rne/9/ - флажок снимается, но его значение становится false

(это согласуется с чистым кодом Javascriptиспользуя checkbox.checked и checkbox.getAttribute('checked'), поэтому я не вставляю другие фрагменты jsfiddle)

EDIT2:

COBOLdinosaur в одном из комментариев указал мне на это:http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-cancelation, но ИМХО это только подтверждает мою точку зрения ...

Ответы [ 2 ]

0 голосов
/ 13 ноября 2011

К тому времени, когда обработчик событий срабатывает, событие уже произошло, и браузер выполняет повторную визуализацию в ответ.Если обработчик приостанавливается, браузер завершает работу, потому что ничто не мешает ему.

Это все равно, что вызвать полицию на ограбление банка, и они попали в дорожную аварию по дороге.Грабители уходят.Дело сделано.

0 голосов
/ 13 ноября 2011

не уверен, что понимаю проблему.почему это не будет правильным поведением?

серьезно, допустим, вы пишете какой-то код, который показывает / скрывает div в зависимости от того, отмечен ли флажок или нет.

Итак, вы пишетеонклик.если флажок снят, а затем вы щелкнете по нему, что, по вашему мнению, следует сделать с div?очевидно, вы ожидаете, что событие обнаружит флажок, который будет отмечен.

...