web-dev-qa-db-ja.com

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

JQueryを使用してイベントハンドラーを接続する場合、クリックメソッドの使用に違いはありますか

$().click(fn)

バインド方法を使用する場合

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

バインドのオプションのデータパラメータ以外。

114
Alan Storm

価値があるものについては、 jQuery source から:

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

いいえ、違いはありません-

$().click(fn)

呼び出します

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

マシューの答えは+1ですが、bindを使用すると、一度に複数のイベントハンドラーをバインドすることもできます。

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

これは、次のものと同等のはるかにクリーンなものです。

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
97
nickf

2つ目のフォームを使用してカスタムイベントをバインドできるという違いが1つあります。それ以外の場合、それらは同義語のようです。参照: jQuery Event Docs

7
nickohrn

.click()の方がはるかに論理的であると思いますが、それはあなたが物事をどのように考えているかと思います。

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

あなたが得るとほぼ同じくらい簡単に思えます。

1
JedH

Bindの[data]パラメーターがあり、これはbind-timeに1回だけ発生します。

Bindの最初のパラメーターとしてカスタムイベントを指定することもできます。

1
aaron

Google Chromeを使用している場合、その開発者ツールにはイベントリスナーツールがあり、そのイベントをスパイする要素を選択します。

両方の方法を試しても同じ結果が得られるため、これらは同等です。

0
Omar Abid

。live()とのインターフェースの一貫性のため、。bind()を好みます。コードを読みやすくするだけでなく、コードの行を変更して、他のメソッドではなく1つのメソッドを使用しやすくします。

0
danorton