2009-02-06 17 views
112

Quando si utilizza jQuery per hookup un gestore di eventi, c'è qualche differenza tra l'utilizzo del metodo click

$().click(fn) 

contro utilizzando il metodo bind

$().bind('click',fn); 

Oltre parametro dati opzionale di bind.

+0

Sembra che il clic abbia anche il parametro dati opzionale. Qualcuno sa se ci sono differenze tra come funziona? Fonte: http://api.jquery.com/click/ –

risposta

134

Per quello che vale, dal jQuery source:

jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick," + 
    "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," + 
    "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){ 

    // Handle event binding 
    jQuery.fn[name] = function(fn){ 
     return fn ? this.bind(name, fn) : this.trigger(name); 
    }; 
}); 

Quindi no, non c'è alcuna differenza -

$().click(fn) 

chiamate

$().bind('click',fn) 
+6

Vero - 'click()' è fondamentalmente una scorciatoia per 'bind ('click')' (o, in questo giorno, un'età, in realtà chiama 'on (' fai clic su ') '. Per come la vedo io, potresti anche risparmiare quella chiamata in più usando' on (' click ') 'direttamente. – Nix

+0

Fanno lo stesso ma bind() diciamo, voglio qualcosa si verifica quando l'uso si sposta su E scatta ecc. Vedere http://stackoverflow.com/a/519455/292408 sotto per l'esempio. Ovviamente è possibile associare solo un evento, ad esempio "clic". –

7

C'è una differenza in quanto è possibile associare eventi personalizzati utilizzando il secondo modulo che si possiede. Altrimenti, sembrano essere sinonimi. Vedere: jQuery Event Docs

95

+1 la risposta di Matteo , ma ho pensato che dovrei menzionare che puoi anche legare più di un evento h andler in una sola volta utilizzando bind

$('#myDiv').bind('mouseover focus', function() { 
    $(this).addClass('focus') 
}); 

che è il molto più pulito equivalente a:

var myFunc = function() { 
    $(this).addClass('focus'); 
}; 
$('#myDiv') 
    .mouseover(myFunc) 
    .focus(myFunc) 
; 
+19

+1 Quegli eventi multipli vincolanti sono notizie per me e probabilmente abbastanza utili. – cletus

+1

Sì, è bello saperlo. –

1

C'è il [i dati] parametro di BIND che avverrà solo in bind-tempo, una volta.

È anche possibile specificare eventi personalizzati come primo parametro di bind.

0

Se disponi di Google Chrome, i relativi strumenti per sviluppatori dispongono di uno strumento listener di eventi, seleziona l'elemento che desideri spiare per l'evento.

Troverete che provare entrambi i modi portano allo stesso risultato, quindi sono equivalenti.

0

preferisco .bind() causa della sua consistenza dell'interfaccia con .Live(). Non solo rende il codice più leggibile, ma rende più semplice cambiare una riga di codice per utilizzare un metodo anziché l'altro.

1

Trovo che il .click() sia molto più logico, ma suppongo che sia come pensi alle cose.

$('#my_button').click(function() { alert('BOOM!'); }); 

Sembra essere praticamente semplice come si ottiene.