2010-06-30 3 views
10

첨부 할 이벤트 핸들러가 실행될 이벤트 핸들 체인의 마지막인지 확인하는 방법이 있습니까?Jquery - 핸들러 체인에서 이벤트 핸들러가 마지막으로 실행되는지 확인하십시오.

나는 ajax에 의해 폼을 제출하는 이벤트 핸들러를 가지고 있지만 나중에 Ajax 제출 핸들러를 첨부 한 후에 다른 핸들러가 폼에 연결되어 유효성 검증 로직을 수행한다. 유효성 검사 로직은 Ajax 제출 핸들러보다 먼저 발생해야하지만 이후에 바인딩되었으므로 유효하지 않습니다.

처리기를 제출하는 내 아약스가 항상 처리기 체인의 마지막 처리기가되도록 처리기가 바인딩되는 순서를 변경하지 않고 만들 수 있습니까?

+0

당신이 코드의 조각을 줄 수 있습니까? – dzida

+0

비슷한 [질문] (http://stackoverflow.com/questions/2360655/jquery-event-handlers-always-execute-in-order-they-were-bound-any-way-around-th/2641047# 2641047). – Anurag

+0

[이 질문에 대한 다른 해결책을 게시했습니다 (http://stackoverflow.com/a/19674508/315024). – Walf

답변

4

직접 주문을 조작 할 방법이 없다고 생각합니다.

이 한 번 봐 : How to order events bound with jQuery

+1

이것은 대답이 아니어야합니다. 그것은 중복으로 투표를 끝내야했습니다. – Flimzy

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

사용 : 일부 HTML

< DIV ID와

$(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); 

}); 

= "엘자 "> </DIV >

일부 CSS

DIV {폭 : 200 픽셀; 높이 : 200px; 배경색 : 빨강; }

당신은 어떤 하나 또는 두 개 이상의 이벤트와 함께 사용할 수 있습니다 :

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