2

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

jsfilddle链接

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

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

我做的很简单

  1. 将光标放在输入标签中
  2. 按回车键

我在 IE10 和 Chrome 上试过这个。

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

谁能告诉我为什么会发生这场灾难

4

2 回答 2

0

IE 像脑残男孩一样处理“回车”按键。在 IE 中的 textbox/input/etc 中按 Enter 将单击它附近完全不相关的按钮。是唯一采用这种方法的浏览器。

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

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

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

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

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

于 2014-11-11T09:45:08.903 回答
0

此行为与 Chrome 根据 HTML5 规范正确实现的隐式表单提交有关。您可以在此处查看规范。

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

于 2014-11-11T09:38:38.163 回答