2009-02-06 17 views
112

Wenn jQuery mit einem Event-Handler-Verbindung, gibt es einen Unterschied der Click-Methode

$().click(fn) 

im Vergleich mit der Methode bind Parameter

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

Anders als bind optionalen Daten zwischen der Verwendung.

+0

Sieht so aus, als hätte click auch den optionalen Datenparameter. Jeder weiß, ob es irgendwelche Unterschiede gibt, wie es funktioniert? Quelle: http://api.jquery.com/click/ –

Antwort

134

Für das, was es wert ist, von der 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); 
    }; 
}); 

Also nein, gibt es keinen Unterschied -

$().click(fn) 

Anrufe

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

True - 'click()' ist im Grunde eine Abkürzung für 'bind ('click')' (oder, an diesem Tag ein Alter, ruft es tatsächlich 'on (' Klicken Sie auf ') '. So wie ich es sehe, können Sie sich auch diesen zusätzlichen Funktionsaufruf mit' on (' click ') 'direkt sichern. – Nix

+0

Sie machen das selbe, aber bind() sagen Sie, ich möchte etwas passieren, wenn die Anwendung schwebt UND klickt etc. Siehe http://stackoverflow.com/a/519455/292408 unten für das Beispiel Sie können natürlich nur an ein Ereignis binden, zB 'klicken'. –

7

Es gibt einen Unterschied, dass Sie benutzerdefinierte Ereignisse mit der zweiten Form binden können, die Sie haben. Ansonsten scheinen sie auch synonym zu sein. Siehe: jQuery Event Docs

95

+1 für Matthew Antwort , aber ich dachte, ich sollte erwähnen, dass du auch mehr als ein Event binden kannst. h andler in einem Rutsch mit bind

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

, die die viel sauberer ist äquivalent zu:

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

+1 Diese Bindung mehrerer Ereignisse ist für mich neu und möglicherweise sehr nützlich. – cletus

+1

Ja, das ist großartig zu wissen. –

1

Es ist die [Daten] Parameter binden, die nur bei bind-Zeit, einmal auftreten.

Sie können benutzerdefinierte Ereignisse auch als ersten Parameter von bind angeben.

0

Wenn Sie Google Chrome haben, haben ihre Entwicklertools ein Ereignis-Listener-Tool, wählen Sie das Element aus, dessen Ereignis Sie ausspionieren möchten.

Sie werden feststellen, dass beide Wege zum selben Ergebnis führen, so dass sie gleichwertig sind.

0

Ich ziehe .bind() wegen seiner Schnittstelle Konsistenz mit .live(). Dadurch wird nicht nur der Code lesbarer, sondern es wird auch einfacher, eine Codezeile so zu ändern, dass eine Methode anstelle der anderen verwendet wird.

1

Ich finde die .click() ist viel logischer, aber ich denke, es ist, wie Sie an Dinge denken.

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

Scheint ungefähr so ​​einfach zu sein, wie Sie bekommen.