Jquery – 确保事件处理程序最后在处理程序链中执行

有没有办法确保您附加的事件处理程序是要执行的事件处理程序链中的最后一个?

我有一个事件处理程序,它通过ajax提交表单,但是稍后,在我附加了我的ajax提交处理程序之后,另一个处理程序附加到表单以执行validation逻辑。 validation逻辑应该在ajax提交处理程序之前发生,但它不会因为它之后被绑定而发生。

有没有办法让它成为我的ajax提交处理程序始终是要执行的处理程序链中的最后一个处理程序,而不更改处理程序绑定的顺序?

我认为没有办法直接操纵订单。

看看这个: 如何订购与jQuery绑定的事件

我的解决方案( http://jsfiddle.net/968jj/1345/ ):

$.fn.lastHandler = function (events, handler) { var element = $(this); events = events.split(' '); for (var evt in events) { var event = $(element).data("events")[events[evt]]; var hsucess = null; $.each(event, function (i, h) { if (h.handler == handler) { hsucess = h; } }); var index = event.indexOf(hsucess); if (index > -1) { event.splice(index, 1); event.push(hsucess); } } } 

用法:

 $(function() { var m1 = function(){ alert("mouseover to be the last"); }; var m2 = function(){ alert("mouseover to be the first"); }; var m3 = function(){ alert("mouseover to be the second"); }; $("#el").mouseover(m1); $("#el").mouseover(m2); $("#el").mouseover(m3); $("#el").lastHandler('mouseover',m1); }); 

有一些HTML

和一些CSS

div {宽度:200px; 身高:200px; 背景颜色:红色; }

您可以将它与任何一个或多个事件一起使用:

 $("#el").lastHandler('keypress keyup change',fnHandler); $("#el").lastHandler('click mouseover',fnHandler);