2013-02-15 16 views
12

È possibile "attendere" più eventi prima di eseguire una funzione? So che è possibile con jQuerydeferred obejcts per utilizzare $.when in attesa di due promesse da risolvere, ma mi chiedevo se è possibile con semplici eventi vecchi?jQuery In attesa di più eventi per sparare

consente di dire un evento click e un evento personalizzato innescano un avviso, ad esempio:

$.when("click", "customEvent").then(function(){ alert("yay"); }); 

risposta

24

Si potrebbe uso differito, devi solo per creare voi stessi.

var clickDfd = $.Deferred(); 
var eventDfd = $.Deferred(); 
$("div").on("click", function(e) { 
    clickDfd.resolve(); 
}); 

$("div").on("some-event", function(e) { 
    eventDfd.resolve(); 
}); 

$.when(clickDfd, eventDfd).done(function(){ 
    alert("yay"); 
}); 
1
var click = 0; 
var hover = 0; 
$("div").on("click mouseenter", function(e) { 
    if(e.type == 'click') { 
     click = 1; 
     bana(); 
    } 
    else if(e.type == 'mouseenter') { 
     hover = 1; 
     bana(); 
    } 
}); 
function bana() { 
    if(click == 1 && hover == 1) { 
     alert(1); 
     click = 0; 
     hover = 0; 
    } 
    else { 
     return false; 
    } 
} 

Beh, Controllo tipi di eventi e impostandole in modo vecchio. Plain jQuery e JS.

Avviso 1 solo quando entrambi gli eventi sono terminati/attivati.

Fiddle

+0

auguro che funziona come si desidera;) –

+0

Ho considerato utilizzando questo approccio (e probabilmente sarà), ero solo curioso di sapere se la loro fosse una sorta di ordinata modo ordinato "magia" jQuery. Grazie per la tua risposta :) – JonWells

+0

@CrimsonChin, non restiamo semplicemente ad aspettare che qualcuno faccia magia per te. Dovresti cercare sul Web o provare te stesso. Bene, dal mio punto di vista, non penso che la soluzione in ordine aiuti sempre. Hai anche bisogno di soluzioni sporche se sei determinato a fare qualcosa di grande. –

Problemi correlati