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

时间:2014-05-02 16:15:27

标签: 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>

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

问题: 这是一个错误,还是默认行为? Chrome,Safari和IE的行为不一样。
如果它是按设计的,我是否需要在提醒之后使用preventDefault或取消冒泡/停止传播来阻止此行为?

2 个答案:

答案 0 :(得分:3)

您可以尝试添加:

window.getSelection().removeAllRanges();

这将解决您的问题。

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

<强> DEMO

答案 1 :(得分:2)

这很有趣。这感觉就像一个bug。我确实在调用setTimeout,然后调用alert

<input ... onblur="setTimeout(function() { alert(...); }, 0);">