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.


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)

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)
;

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


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.


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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.