在IE中捕获奇怪的事件

时间:2014-11-11 08:58:28

标签: javascript internet-explorer onclick event-capturing

我只是在IE10和Chrome浏览器上测试相同的代码。

jsfilddle link

<div id='a'><input onclick="console.log('a');"/></div>
<div id='b'><button onclick="alert('b');"/></div>`

我在两个不同的div标签中放入两个不同的输入标签和按钮。 两个元素(输入,按钮)都有onclick属性。

我做的很简单

  1. 将光标放在输入标记
  2. 按enter键
  3. 我在IE10和Chrome上试过这个。

    在chrome浏览器中,附加在按钮上的事件处理程序尚未执行。 但是在IE中,附加在按钮上的事件处理程序已经执行。

    任何人都可以告诉我为什么会发生这场灾难

2 个答案:

答案 0 :(得分:0)

此行为与隐式表单提交有关,Chrome已根据HTML5规范正确实施。您可以浏览规范here

简而言之,在文本字段聚焦时“按下回车键”会调用浏览器控制的隐式表单提交,然后查找“表单”元素下的第一个提交按钮并调用附加的处理程序。
在你的情况下,'button'元素默认为'submit'类型,但由于它不是'form'元素的后代,因此不会被调用。
您可以假设当前的IE行为不符合规范。

答案 1 :(得分:0)

IE正在处理像脑损伤的男孩那样进入&#34;进入&#34;按键。在IE中按文本框/输入/等中的Enter将单击它附近的完全不相关的按钮。是唯一采用这种方法的浏览器。

它与IE的选择提交按钮的算法有关。即使没有表格标签,您的按钮也会被视为一个按钮。

<button onclick="alert('b');"/> has default type = "submit"

您可以通过使用按钮1更改类型来更改它。

<button type="button" onclick="alert('b');"/> 

工作小提琴:http://jsfiddle.net/k1bkcx43/