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

时间:2011-11-13 16:50:09

标签: javascript dom javascript-events jquery preventdefault

我有以下摘录:http://jsfiddle.net/L7rne/5/http://jsfiddle.net/L7rne/6/

事实证明,如果您在点击事件处理程序中暂停执行脚本,则会选中复选框,即使存在event.preventDefault()

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

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

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

编辑:

当您选中复选框时,它会变得更有趣: http://jsfiddle.net/L7rne/8/ - 该复选框未选中,但其值仍为已选中 http://jsfiddle.net/L7rne/9/ - 该复选框未选中,但其值变为 false

(这与使用checkbox.checkedcheckbox.getAttribute('checked')的纯Javascript代码一致,因此我不会粘贴其他jsfiddle代码段

EDIT2:

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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