2010-06-30 104 views
10

鏈要執行有沒有一種方式,以確保您連接的事件處理程序中的事件處理程序鏈中最後一個被執行?jQuery的 - 確保事件處理程序是最後的處理程序

我有一個事件處理程序,通過AJAX提交表單,但在稍後的時間,當我附上我的ajax提交處理程序,另一個處理程序連接到形式做驗證邏輯。驗證邏輯應該發生在ajax提交處理程序之前,但是之後它不會被綁定。

是否有辦法使它所以我的AJAX提交處理程序總是在處理程序鏈中的最後一個處理程序來執行,而不改變其處理程序綁定的順序?

+0

你可以給一段代碼? – dzida 2010-06-30 15:44:04

+0

看到類似的[問題](http://stackoverflow.com/questions/2360655/jquery-event-handlers-always-execute-in-order-they-were-bound-any-way-around-th/2641047# 2641047)。 – Anurag 2012-02-03 17:18:00

+0

我在[此問題]上發佈了針對此問題的其他解決方案(http://stackoverflow.com/a/19674508/315024)。 – Walf 2013-10-30 05:32:16

回答

1

我的解決方案(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

< DIV ID = 「埃爾「> < /格>

和一些CSS

DIV {寬度:200像素; height:200px;背景顏色:紅色; }

你可以使用任何一個或多個事件中使用它:

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