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

115

W przypadku korzystania z jQuery do podłączenia modułu obsługi zdarzeń istnieje różnica między używaniem metody click

$().click(fn)

w porównaniu z metodą bind

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

Inny niż opcjonalny parametr danych wiązania.

Alan Storm
źródło
Wygląda na to, że click ma również opcjonalny parametr danych. Czy ktoś wie, czy są jakieś różnice między tym, jak to działa? Źródło: api.jquery.com/click
Nick Udell

Odpowiedzi:

137

Za co warto, ze źródła jQuery :

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

Więc nie, nie ma różnicy -

$().click(fn)

wezwania

$().bind('click',fn)
Matthew Maravillas
źródło
6
To prawda - click()jest w zasadzie skrótem od bind('click')(lub, w dzisiejszych czasach, faktycznie nazywa się to wiekiem on('click'). Tak, jak ja to widzę, równie dobrze możesz zaoszczędzić sobie tego dodatkowego wywołania funkcji, używając on('click')bezpośrednio.)
Nix
Robią to samo, ale bind () powiedzmy, że chcę, aby coś się stało, gdy użycie najedzie kursorem ORAZ kliknie itp. Zobacz przykład stackoverflow.com/a/519455/292408 poniżej. Możesz oczywiście powiązać tylko jedno zdarzenie, np. „Kliknięcie”.
Elijah Lynn
98

+1 za odpowiedź Matthew, ale pomyślałem, że powinienem wspomnieć, że możesz również powiązać więcej niż jedną procedurę obsługi zdarzeń za jednym razem, używając bind

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

co jest znacznie czystszym odpowiednikiem:

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
nickf
źródło
20
+1 To wiązanie wielu wydarzeń jest dla mnie nowością i prawdopodobnie całkiem przydatne.
cletus
7

Jest jedna różnica polegająca na tym, że zdarzenia niestandardowe można wiązać przy użyciu drugiego posiadanego formularza. W przeciwnym razie wydają się być synonimami. Zobacz: jQuery Event Docs

nickohrn
źródło
1

Istnieje parametr [data] wiązania, który pojawi się tylko raz w czasie wiązania.

Możesz również określić zdarzenia niestandardowe jako pierwszy parametr bind.

aaron
źródło
1

Uważam, że .click () jest o wiele bardziej logiczne, ale wydaje mi się, że tak właśnie myślisz.

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

Wydaje się być tak proste, jak to tylko możliwe.

JedH
źródło
0

Jeśli masz Google Chrome, ich narzędzia programistyczne mają narzędzie do nasłuchiwania zdarzeń, wybierz element, który chcesz śledzić jego zdarzenie.

Przekonasz się, że wypróbowanie obu sposobów prowadzi do tego samego wyniku, więc są one równoważne.

Omar Abid
źródło
0

Preferuję .bind () ze względu na jego spójność interfejsu z .live () . Nie tylko sprawia, że ​​kod jest bardziej czytelny, ale także ułatwia zmianę wiersza kodu tak, aby używał jednej metody zamiast drugiej.

danorton
źródło