2011-11-09 18 views
11

Chiedersi se esiste un modo elegante per ascoltare una funzione in javascript e/o jQuery.Funzione listener in javascript e/o jQuery

Piuttosto che ascoltare un $('#mything').click(function(){ //blah }) Mi piacerebbe ascoltare quando viene attivata una funzione specifica. Non voglio modificare la funzione in quanto è all'interno di una libreria che non voglio modificare direttamente.

Ho trovato questo: http://plugins.jquery.com/project/jqConnect che collega le funzioni.

Ma chiedendo una tecnica migliore.

risposta

11

L'unico modo per farlo è quello di ignorare la funzione (cioè, incidere la biblioteca):

(function() { 
    var oldVersion = someLibrary.someFunction; 
    someLibrary.someFunction = function() { 
     // do some stuff 
     var result = oldVersion.apply(this, arguments); 
     // do some more stuff 
     return result; 
    }; 
})(); 

Edit: per eseguire il codice dopo che la funzione di libreria ha funzionato, basta chiamare la funzione di libreria prima, memorizzando il risultato in una variabile. Quindi, esegui il codice e infine restituisci il risultato memorizzato in precedenza. Ho aggiornato l'esempio precedente per gestire il codice in esecuzione prima o dopo la funzione di libreria.

+0

Probabilmente si dovrebbe restituire il valore di chiamare oldVersion nel caso in cui il valore restituito sia importante. – jfriend00

+0

Buona chiamata! Fatto. – gilly3

+0

eccellente. grazie – doublejosh