【发布时间】:2013-10-29 15:23:23
【问题描述】:
我遇到了这个问题,用户的单个操作应该触发两个事件,但它只触发第一个事件。
场景:
用户在 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 事件正在改变页面布局,它非常轻微地将按钮的位置向下推。聚焦完成后会触发 click 事件,但由于按钮不再位于完全相同的位置,因此没有任何反应。
这是一个更新的小提琴,显示了我的问题 http://jsfiddle.net/fCz6X/11/
【问题讨论】:
-
jsfiddle.net/fCz6X/8使用console.log
-
更改了代码以将文本添加到设置警报的页面 - 工作正常 here
-
@MikeW 文本实际上必须稍微移动按钮,例如)jsfiddle.net/fCz6X/10
-
已更改 fiddle 以执行此操作,并且不再触发 Click 事件。只是想想……
标签: javascript jquery html events