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

时间:2014-06-12 15:35:30

标签: javascript jquery function event-handling

我有一个元素:

<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!'); });

正如您可以通过模糊警报所说的那样,事件处理程序的附加顺序不一定是我希望它们触发的顺序。

我如何提醒&#39;第三功能&#39;只有其他两个点击事件处理程序完成后才会完成?

我尝试过的事情

我尝试过通过以下方式处理各个事件处理程序:

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

但我无法明确提及处理程序附加的顺序(因此[0]可能不正确)。

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

注意:我不相信这只是指定事件顺序的情况,因为我最后要执行的功能可能不知道稍后要附加的功能,所以我可以&据我所知,#39; t处理事件处理程序作为集合。

1 个答案:

答案 0 :(得分:1)

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

$('#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])
    }
});

--DEMO--