Javascript - 通过鼠标单击Firefox行为模糊.错误?

Ben*_*ung 7 javascript firefox blur onblur

场景:作为javascript字段验证的一部分显示警告消息onblur(或onchange).

使用onblur的用户操作:
1)单击内部输入
2)在输入外单击
3)关闭警报消息
4)移动鼠标左右

结果: mousedown似乎是在警报出现之前单击的位置执行的 - 当您移动鼠标时,页面上的元素会被选中.
注意:在输入选项卡时不会发生这种情况.

演示: http ://jsfiddle.net/s9sc4/

<body>
Click inside the input and then outside of it.
<input type="text" onblur="alert('Close this alert message and move the mouse around.');" />
TEST TEST TEST
</body>
Run Code Online (Sandbox Code Playgroud)

转载于:
Firefox 28和29平台:Windows 7和8以及OSX Mavericks(4种不同的机器).
使用干净的Firefox配置文件没有任何区别.

问题: 这是一个错误,还是默认行为?Chrome,Safari和IE不会像这样.
如果它是设计的,我是否需要使用preventDefault执行某些操作或在警报后取消冒泡/停止传播以停止此行为?

Tim*_*len 3

您可以尝试添加:

window.getSelection().removeAllRanges();
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题。

回答你的问题:这似乎是FireFox 的一个错误,需要解决方法。发生的情况是 FireFox 搞乱了focus首先设置的事件的优先级,先于onblur。没有该 bug 的浏览器在 onblur 发生时不会触发 focus 事件。

演示版

  • 这有点间接,因为该错误讨论了“焦点”问题。尽管这是这个特定问题的根本原因(恕我直言)。经过更多搜索后,我发现 [类似问题](https://bugzilla.mozilla.org/show_bug.cgi?id=53579) 可以追溯到 2000 年,并且它们都需要相同的解决方法。我想他们承认这一点是件好事。 (2认同)