Javascript-Firefox行为通过鼠标点击模糊。缺陷

Javascript-Firefox行为通过鼠标点击模糊。缺陷,javascript,firefox,blur,onblur,Javascript,Firefox,Blur,Onblur,场景:显示警报消息onblur(或onchange)作为javascript字段验证的一部分 使用onblur的用户操作: 1) 单击内部输入 2) 在输入之外单击 3) 关闭警报消息 4) 移动鼠标 Result:mousedown似乎是在警报出现之前单击的位置执行的——当您移动鼠标时,页面上的元素会被选中。 注意:当跳出输入时不会发生这种情况 演示: 在输入内部单击,然后在输入外部单击。 测试 转载于: Firefox28和29 平台:Windows 7和8以及OSX Mavericks

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

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

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

演示:


在输入内部单击,然后在输入外部单击。
测试
转载于:
Firefox28和29 平台:Windows 7和8以及OSX Mavericks(4台不同的机器)。
使用干净的Firefox配置文件没有任何区别

问题: 这是错误还是默认行为?Chrome、Safari和IE不会这样做。

如果按照设计,我是否需要使用preventDefault或在警报后取消冒泡/停止传播来停止此行为?

这很有趣。这感觉像个虫子。我确实绕过了它,打电话给
setTimeout
,然后打电话给
alert

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

您可以尝试添加:

window.getSelection().removeAllRanges();
这会解决你的问题

回答你的问题:这似乎是FireFox的问题,需要解决。发生的事情是FireFox弄乱了事件的优先级,在
onblur
之前,先设置了
focus
。当onblur发生时,没有bug的浏览器不会触发焦点事件


谢谢您——这应该适用于我的应用程序。我想知道为什么Mozilla不把修复这样的基本问题放在更高的优先级上。我真的看不到您链接到的bug的链接,但我将其作为一个新bug提交,这一点已经得到确认:不幸的是,它被积压了……这有点间接,因为bug谈到了
焦点
问题。尽管这是这个特殊问题(imho)的根本原因。在搜索了一些之后,我发现可以追溯到2000年,它们都需要相同的解决方法。我想他们承认这是件好事。天哪,14年了。这个bug可能永远也不会被修复,除非Firefox的特定部分可能得到彻底检修。
window.getSelection().removeAllRanges();