我遇到了这个问题,用户的单个操作应该触发两个事件,但它只触发第一个事件。
场景:
用户在 focusout 上修改布局的特殊字段中输入一些文本,输入文本后,不离开该字段,他们单击一个按钮。
发生了什么?
我在文本框上有一个焦点事件,在按钮上有一个单击事件。我看到的是 focusout 事件被触发,但 click 事件永远不会触发。
我已经将它封装在一个 jsfiddle 中:
$('#theText').focusout(function (){
$("#focusevent").text("Focusevent");
console.log("focus");
});
$('#theButton').click(function (){
$("#clickevent").text("Clickevent");
console.log("click");
});
因此,如果您单击文本字段然后单击按钮,我希望这两个事件都会触发,但我们只看到焦点输出事件。
我通过让 mousedown 事件触发按钮而不是 click 事件(这在 focusout 事件之前触发)对此进行了临时修复,但这会导致一些我不想看到的其他行为和问题。由于这些,我认为最佳解决方案是找到一种方法来同时触发聚焦和点击事件。有没有人对如何解决这个问题有想法?
编辑:在看到最初的响应后,我挖得更深一点,这里的问题是 focusout 事件正在改变页面布局,它非常轻微地将按钮的位置向下推。聚焦完成后会触发单击事件,但由于按钮不再位于完全相同的位置,因此没有任何反应。
这是一个更新的小提琴,显示了我的问题 http://jsfiddle.net/fCz6X/11/