在单击处理程序甚至被调用之前,正在检查复选框

我有以下几个片段: http : //jsfiddle.net/L7rne/5/和http://jsfiddle.net/L7rne/6/

事实certificate,如果您在click事件处理程序中暂停执行脚本,那么即使存在event.preventDefault() ,也会选中该复选框。

我在Firefox 7和Chrome 15中尝试了这一点,两者的行为方式相同。

我几乎可以肯定这是一个正确的行为,但不知怎的,我找不到任何参考为什么它是这样的。

有人能指出我正确的方向吗?

编辑:

当你选中复选框后,它变得更加有趣: http : //jsfiddle.net/L7rne/8/ – 复选框变为未选中状态,但其值仍保持检查状态 http://jsfiddle.net/L7rne/9/ – 复选框变得不受控制,但它的价值变得虚假

(这与使用checkbox.checkedcheckbox.getAttribute('checked')纯Javascript代码一致,所以我没有粘贴另一个jsfiddle代码段)

EDIT2:

其中一条评论中的COBOLdinosaur向我指出 : http : //www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-cancelation ,但恕我直言,这只能证实我的观点…

不确定我是否理解这个问题。 为什么不是正确的行为?

严肃地说,假设您根据是否勾选了复选框来编写显示/隐藏div的代码。

所以,你写了一个onclick。 如果复选框未选中,然后单击它,您认为应该对div做什么? 显然,您希望事件找到要检查的复选框。

随着时间事件处理程序触发,事件已经发生,浏览器将重新呈现以作为响应。 如果处理程序被挂起,那么浏览器就完成了工作,因为没有任何东西阻止它。

它就像叫警察去银行抢劫一样,他们正在途中发生交通事故。 劫匪逃走了。 契约已经完成。