应该先模糊或滑鼠下火

Should blur or mousedown fire first?

本文关键字:模糊      更新时间:2023-09-26
<!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>

现在由于某种原因,所有浏览器似乎都是先按下鼠标。

  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它是所有鼠标先下,模糊后

更新:除非你使用警报。如果你在某个地方放了一个警告,你就不能指望任何东西都按照你想要的方式工作。

例如,一些(较旧的)浏览器会进入一个永无止境的循环,如果你提醒一个错误的onblur,然后试图关注违规字段,然后模糊空的下一个字段

天哪,真是个没完没了的故事。我不想知道我花了多少时间才弄明白那个行为。正如你提到的,它的行为不同,所以实际上没有"正确"。然而,我不太了解关于这个特定实例的W3C规范(如果真的有的话?),但是要知道,您必须创建一些逻辑以使事物以正确的顺序触发。