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

115

Saat menggunakan jQuery untuk menghubungkan event handler, apakah ada perbedaan antara menggunakan metode klik

$().click(fn)

versus menggunakan metode mengikat

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

Selain parameter data opsional bind.

Alan Storm
sumber
Sepertinya klik juga memiliki parameter data opsional. Ada yang tahu jika ada perbedaan antara cara kerjanya? Sumber: api.jquery.com/click
Nick Udell

Jawaban:

137

Untuk apa nilainya, dari sumber 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);
    };
});

Jadi tidak, tidak ada perbedaan -

$().click(fn)

panggilan

$().bind('click',fn)
Matthew Maravillas
sumber
6
Benar - click()pada dasarnya adalah singkatan untuk bind('click')(atau, di zaman sekarang ini, panggilan sebenarnya on('click'). Menurut saya, Anda mungkin juga menyimpan panggilan fungsi tambahan itu dengan menggunakan on('click')secara langsung.
Nix
Mereka melakukan hal yang sama tetapi bind () katakanlah, saya ingin sesuatu terjadi saat penggunaan melayang DAN klik, dll. Lihat stackoverflow.com/a/519455/292408 di bawah sebagai contoh. Anda tentu saja hanya dapat mengikat ke satu peristiwa, misalnya 'klik' juga.
Elijah Lynn
98

+1 untuk jawaban Matthew, tetapi saya pikir saya harus menyebutkan bahwa Anda juga dapat mengikat lebih dari satu pengendali acara sekaligus menggunakan bind

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

yang jauh lebih bersih setara dengan:

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
nickf
sumber
20
+1 Beberapa peristiwa yang mengikat adalah berita bagi saya dan mungkin sangat berguna.
cletus
7

Ada satu perbedaan di mana Anda dapat mengikat acara khusus menggunakan formulir kedua yang Anda miliki. Jika tidak, mereka tampaknya sinonim. Lihat: jQuery Event Docs

nickohrn
sumber
1

Ada parameter [data] dari bind yang hanya akan terjadi pada waktu-bind, satu kali.

Anda juga dapat menentukan peristiwa khusus sebagai parameter pertama dari bind.

aaron
sumber
1

Menurut saya .click () jauh lebih logis, tapi saya rasa begitulah cara Anda memikirkan berbagai hal.

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

Tampaknya sesederhana yang Anda dapatkan.

JedH
sumber
0

Jika Anda memiliki Google Chrome, alat pengembang mereka memiliki alat pendengar acara, pilih elemen yang Anda ingin untuk memata-matai acara.

Anda akan menemukan bahwa mencoba kedua cara tersebut menghasilkan hasil yang sama, jadi keduanya setara.

Omar Abid
sumber
0

Saya lebih suka .bind () karena konsistensi antarmukanya dengan .live () . Tidak hanya membuat kode lebih mudah dibaca, tetapi juga memudahkan untuk mengubah baris kode untuk menggunakan satu metode daripada yang lain.

danorton
sumber