jQuery: $ (). click (fn) vs. $ (). bind ('click', fn);

115

Wenn Sie jQuery zum Anschließen eines Ereignishandlers verwenden, gibt es einen Unterschied zwischen der Verwendung der Klickmethode

$().click(fn)

versus mit der Bindemethode

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

Außer dem optionalen Datenparameter von bind.

Alan Storm
quelle
Es sieht so aus, als hätte click auch den optionalen Datenparameter. Weiß jemand, ob es Unterschiede gibt, wie es funktioniert? Quelle: api.jquery.com/click
Nick Udell

Antworten:

137

Für das, was es wert ist, aus der jQuery-Quelle :

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, es gibt keinen Unterschied -

$().click(fn)

Anrufe

$().bind('click',fn)
Matthew Maravillas
quelle
6
Richtig - click()ist im Grunde eine Abkürzung für bind('click')(oder in der heutigen Zeit ruft es tatsächlich an on('click'). So wie ich es sehe, können Sie sich diesen zusätzlichen Funktionsaufruf genauso gut sparen, indem Sie ihn on('click')direkt verwenden.
Nix
Sie machen dasselbe, aber bind () sagen wir mal, ich möchte, dass etwas passiert, wenn die Verwendung schwebt UND klickt usw. Siehe stackoverflow.com/a/519455/292408 unten für das Beispiel. Sie können natürlich nur an ein Ereignis binden, z. B. auch "Klicken".
Elijah Lynn
98

+1 für Matthews Antwort, aber ich dachte, ich sollte erwähnen, dass Sie auch mehr als einen Event-Handler auf einmal mit binden können bind

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

Welches ist das viel sauberere Äquivalent zu:

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
nickf
quelle
20
+1 Das Binden mehrerer Ereignisse ist für mich neu und möglicherweise sehr nützlich.
Cletus
7

Es gibt einen Unterschied darin, dass Sie benutzerdefinierte Ereignisse mit dem zweiten Formular binden können, das Sie haben. Ansonsten scheinen sie synonym zu sein. Siehe: jQuery-Ereignisdokumente

Nickohrn
quelle
1

Es gibt den Parameter [data] von bind, der nur einmal zur Bindungszeit auftritt.

Sie können auch benutzerdefinierte Ereignisse als ersten Parameter für die Bindung angeben.

Aaron
quelle
1

Ich finde, dass .click () viel logischer ist, aber ich denke, so denkst du über Dinge.

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

Scheint so einfach wie möglich zu sein.

JedH
quelle
0

Wenn Sie über Google Chrome verfügen, verfügen die Entwicklertools über ein Ereignis-Listener-Tool. Wählen Sie das Element aus, dessen Ereignis Sie ausspionieren möchten.

Sie werden feststellen, dass das Ausprobieren beider Methoden zum gleichen Ergebnis führt, sodass sie gleichwertig sind.

Omar Abid
quelle
0

Ich bevorzuge .bind () wegen seiner Schnittstellenkonsistenz mit .live () . Dies macht den Code nicht nur besser lesbar, sondern erleichtert auch das Ändern einer Codezeile, um eine Methode anstelle der anderen zu verwenden.

Danorton
quelle