javascript - 应该首先触发 blur 还是 mousedown?

标签 javascript dom dom-events

<!doctype html>
<body>
<input onblur="alert('b');">
<button onmousedown="alert('m');">a</button>
</body>

由于某种原因,blur 似乎首先在 Firefox/IE 上触发(但 mousedown 似乎首先在 Chrome/Safari 上触发)。

然而,当我们将代码更改为:

<!doctype html>
<body>
<input onblur="document.title+='b';">
<button onmousedown="document.title+='m';">a</button>
</body>

现在由于某些原因,mousedown 似乎首先对所有浏览器触发。

  1. 这种异常的解释是什么?

  2. 根据 W3C 规范,哪种行为应该是标准

最佳答案

所以为了这个测试我做了这个 fiddle

<input onblur="document.getElementById('msg').innerHTML+=new Date().getTime()+' - blur<br/>'">
<button onmousedown="document.getElementById('msg').innerHTML+=new Date().getTime()+' - md<br/>'">a</button>
<div id="msg">---<br/></div>

在 Windows XPsp3 上,在 Fx5、IE8、Opera 11、Safari5、Chrome 13 中,首先是鼠标按下,然后是模糊

更新:使用警报时除外。如果您在某处放置警报,您就不能指望任何东西按您希望的方式工作。

例如,一些(较旧的)浏览器会进入一个永无止境的循环,如果您在 blur 上发出错误警报,然后尝试聚焦有问题的字段,这将模糊空的 next 字段

关于javascript - 应该首先触发 blur 还是 mousedown?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939306/

相关文章:

javascript - 就效率和优雅而言,添加和删除事件监听器或使用全局/高级变量来控制发射器事件逻辑更好吗?

javascript - 如何在 Angular 中向 body 标签添加事件?

javascript - 使用 JavaScript 将 DIV 元素添加到 IFRAME 中

javascript - 更新到 angular2 beta.1 后,路由器不再工作。它在 beta.0 中做到了

javascript - 在动态创建的 React 组件上设置自定义 Prop

javascript - 如何在JavaScript中按名称选择ID?

javascript - 对集合中的条目进行分类

javascript - 获取详细信息后动态检查附加到 DOM 的输入框

html - 如何在IE9中访问Event.target?

javascript - JavaScript 无法运行