2012-12-28 2 views
5

Nel mio codice, viene impostato un gestore di eventi per un elemento che modifica l'altezza del css di quell'elemento a 100px. Da qualche altra parte, voglio che venga eseguito un gestore di eventi diverso se si verificano determinate condizioni, che dovrebbero ignorare il precedente gestore di eventi e modificarne l'altezza a 200 px.Come sovrascrivere un gestore di eventi jquery precedentemente impostato?

C'è un modo per farlo o cancellare tutti i gestori di eventi precedentemente impostati per un elemento?

+0

È possibile verificare le condizioni all'interno del gestore eventi, no? –

risposta

13

Sì, basta usare .off(), come

$('selector').off('eventname') 
3

Questo è un po 'di un hack, ma suona come si sta cercando di incidere sul codice di qualcun altro senza la capacità di modificarlo direttamente in modo che possa essere ciò a cui devi ricorrere.

Se avete solo bisogno di chiamare qualcosa dopo la loro document.ready() e non controllare l'ordine delle document.ready() dichiarazioni, allora si può mettere un po 'di codice in un breve timeout come questo all'interno del vostro gestore document.ready:

$(document).ready(function() { 
    setTimeout(function() { 
     $('selector').off('eventname').on(your event handler here); 
    }, 1); 
}); 

Il setTimeout() verrà eseguito DOPO che tutti i gestori document.ready() hanno eseguito.

+0

Esiste un codice per verificare se sono stati impostati eventi per l'elemento specificato o meno. Quindi potrei fare: 'if ($ (ele) .hasHandler ('click'))/* clear event/* else setTimeout (this, 1000);', per assicurarsi che l'evento sia stato impostato prima che la mia funzione venga chiamata –

+0

@ClickUpvote - non è necessario controllare prima. Basta rimuovere eventuali gestori applicati in precedenza, quindi allegare i propri. Se non ce ne fossero, rimuovere non farà nulla. Cordiali saluti, questo funziona SOLO per jQuery gestori di eventi applicati, non semplici gestori applicati JavaScript. – jfriend00

+0

Giusto, ma se potessi controllare prima di rimuoverlo, funzionerebbe in modo più affidabile, ad esempio controlla se l'evento è impostato, se sì, rimuovi e imposta nuovo, in caso contrario, controlla di nuovo 1 secondo dopo, ripeti –