2010-06-30 10 views
10

Czy istnieje sposób upewnienia się, że dołączony moduł obsługi zdarzeń jest ostatnim w łańcuchu procedur obsługi zdarzeń, które mają zostać wykonane?Jquery - Upewnij się, że program obsługi zdarzeń jest ostatni do wykonania w łańcuchu obsługi

Mam program obsługi zdarzeń, który przesyła formularz przez ajax, ale w późniejszym czasie, po dołączeniu modułu do przesyłania zgłoszeń ajax, do formularza dołączana jest kolejna procedura do sprawdzania poprawności. Logika sprawdzania poprawności powinna nastąpić przed procedurą obsługi przesyłania ajax, ale nie, ponieważ została później powiązana.

Czy istnieje sposób, aby mój handler przekazujący ajax był zawsze ostatnim handler'em w łańcuchu handlerów do wykonania, bez zmiany kolejności, w której handlerki są powiązane?

+0

można dać kawałek kodu? – dzida

+0

Zobacz podobne [pytanie] (http://stackoverflow.com/questions/2360655/jquery-event-handlers-always-execute-in-order-they-wst-bound-any-way-round-th/2641047# 2641047). – Anurag

+0

Wysłałem inne rozwiązanie tego problemu na [to pytanie] (http://stackoverflow.com/a/19674508/315024). – Walf

Odpowiedz

4

Nie sądzę, że istnieje sposób bezpośredniego manipulowania zamówieniem.

Spójrz na to: How to order events bound with jQuery

+1

To nie powinna być odpowiedź; powinno być głosowanie, aby zamknąć jako duplikat. – Flimzy

1

Moje rozwiązanie (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); 
     } 
    } 
} 

Wykorzystanie:

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

}); 

Z pewnym HTML

< div id = "el "> </div >

i niektóre CSS

div {width: 200px; wysokość: 200 pikseli; kolor tła: czerwony; }

Można go używać z jednego lub więcej niż jednego zdarzenia:

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