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.


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)

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

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


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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.