【发布时间】:2015-04-12 17:12:56
【问题描述】:
我遇到了事件未按预期顺序触发的问题。我在输入元素上有一个用于聚焦和聚焦的事件。 .focus() 显示一些内容, .focusout() 隐藏它。我希望能够对使用 .focus() 显示的一些数据进行 .click(),但是当我单击它时,首先要触发的是 .focusout() 事件处理程序,并且对于使用 .click() 事件处理程序隐藏内容的操作出于某种原因。
这是我的事件监听器:
$('#content').click(function(evt) {
alert('Yay');
});
$('input').focus(function() {
$('#content').show();
});
$('input').focusout(function() {
$('#content').hide();
});
如果其中任何一个令人困惑,您可以在此 jsfiddle 中查看确切的行为。单击输入框时,会显示红色框。但是,如果您随后尝试激活红色框上的单击侦听器,则 .focusout() 优先并隐藏内容,并且不会发生 .click() 事件。
期望的行为:点击输入,显示内容,点击内容,触发内容点击监听器。
【问题讨论】:
-
它会在被点击之前隐藏,因此不会触发点击事件,因为它没有被点击
-
不确定我确切地知道你想要什么,但这是否接近jsfiddle.net/j08691/etckaehL?
-
@j08691 或多或少。你解决了这个问题,但我更好奇为什么会发生这种情况。我认为事件是先进先出的。
-
@ShaifulIslam 据我了解,这些事件发生在 FIFO 队列中。由于我首先定义了点击事件,所以我假设它会被首先调用。
-
您可以使用@guest271314 解决方案来隐藏内容,以便触发点击事件
标签: javascript jquery events listener