我如何确保特定的单击事件处理程序执行后,所有其他附加的单击处理程序



我有一个元素:

<div id='myButton'>Click Me!</div>

单击myButton时,将触发任意数量的单击事件处理程序。

例如,以下3个事件处理程序可能以以下方式(和顺序)附加:

$('#myButton').click(function() { alert('First function!'); });

$('#myButton').click(function() { alert('Third function!'); });

$('#myButton').click(function() { alert('Second function!'); });

正如您可能从模糊的警报中看出的那样,事件处理程序附加的顺序不一定是我希望它们触发的顺序。

我如何提醒'第三函数',只有当其他两个点击事件处理程序已经完成?

What I've try

我已经尝试过与单个事件处理程序通过:

$._data($('#myButton')[0], "events" ).click;

但是我不能显式地引用处理程序所附加的顺序(因此[0]可能不正确)。

我也尝试过使用jQuery when,但我怀疑我是在错误的树中吠叫,因为事件处理程序已经附加并将以这样的顺序执行,除非我完全删除它。

注意:我不认为这是简单地指定事件顺序的情况,因为我想最后执行的函数可能不知道稍后要附加的函数,所以据我所知,我不能将事件处理程序作为一个集合来处理。

如果您能够设置特定的命名空间,可以使用以下代码片段:

$('#myButton').click(function() { alert('First function!'); });
$('#myButton').on("click.last", function() { alert('Third function!'); });
$('#myButton').click(function() { alert('Second function!'); });
var clicks = $._data($('#myButton')[0], "events" ).click;    
$.each(clicks, function(i, evt){
    if(evt.namespace === "last") {
        clicks.splice(clicks.length - 1, 0, clicks.splice(i, 1)[0])
    }
});

——演示——

相关内容

  • 没有找到相关文章

最新更新