2012-12-18 12 views
10

Dopo aver posto la stessa domanda 2 settimane fa here, ho finalmente trovato la "soluzione". Questo è il motivo per cui sto rispondendo alla mia stessa domanda. ;)Come associare, slegare e riassociare eventi (clic) in JQuery

COME BIND, UNBIND E REBIND EVENTI IN JQUERY?

+2

Eventuali duplicati di [jquery rebind() eventi disabilitare per un tempo specifico, poi associare nuovamente] (https://stackoverflow.com/questions/13729681/jquery-rebind-disable-events-for-a- specifico-time-then-rebind-it) –

risposta

10

E QUESTA è la soluzione perfetta. (Almeno per me.)

$(document).on('click', 'a#button', function(){ 
    $(this).after('<span> hello</span>'); 
    $('span').fadeOut(1000); 
}); 

$('a#toggle').toggle(
    function(){ 
     $(this).text('rebind'); 
     $('a#button').on('click.disabled', false); 
    }, 
    function(){ 
     $(this).text('unbind'); 
     $('a#button').off('click.disabled'); 
    } 
); 

".on()" lo fa. NOTA: è importante associare l'evento come puoi vedere sulla prima linea! Non funziona con .click() o ...!

Vedere il docs!

Here is a fiddle per provarlo e sperimentarlo!

Divertiti!

+1

Perché hai ripubblicato se hai già risposto alla tua domanda originale? –

+1

Immagino perché l'altra soluzione è anche bella e utile! (Aggiornato il vecchio post) –

+0

Ottima risposta! Questo certamente mi ha aiutato a disabilitare temporaneamente l'evento click di un pulsante. E, per ulteriore enfasi, il contesto dell'evento click dovrebbe essere come viene mostrato nella risposta sopra! –

-1

Questa funzione estende jQuery per includere un operatore che allega gestori di eventi uguali a .on. Inoltre impedisce più di una singola istanza di un dato gestore di essere collegato al selettore (s).

Tenere presente che la rimozione e il ricollegamento dei gestori di eventi modifica l'ordine in cui sono collegati.

(function ($) { 
    $.fn.reBind = function(events, handler) { 
     return this.off(events, handler).on(events, handler); 
    }; 
}(jQuery)); 
2

Una soluzione più semplice e breve è quello di aggiungere una classe per l'oggetto se si vuole separare poi rimuovere questa classe per associare nuovamente ex;

$('#button').click(function(){ 
    if($(this).hasClass('unbinded')) return; 
    //Do somthing 
}); 

$('#toggle').click(function(){ 
    $('#button').toggleClass('unbinded'); 
});