3

次のようなコードをよく見かけます。

$("#thing").on("mouseenter",function(){ Do stuff });

個人的には、私はほとんどいつも次のように書いています。

$("#thing").mouseenter(function(){ Do stuff });

同様に、私はよく書いています

$("#thing").click(function(){})

しかし、私は人々がそれを修正するのを見てきました (はい、v. 1.7+ よりもon優先されることを知っているので、基本的に同じ設定の問題です):bind

$("#thing").bind("click",function(){}) 

私は何か「間違った」ことをしていますか、私が見ていない2つの機能の間に深い違いはありますか? それは常に私がやりたいことをしているように見えるので、実際的な問題ではありませんでしたが、私が見落としている理論的な考慮事項があるかどうか知りたいです.

4

4 に答える 4

7

実際にはそうではありませんが、ソース コードに見られるように、mouseenter関数が呼び出すときon(または引数なしで呼び出された場合)は少しだけ高速です。trigger

jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

    // Handle event binding
    jQuery.fn[ name ] = function( data, fn ) {
        return arguments.length > 0 ?
            this.on( name, null, data, fn ) :
            this.trigger( name );
    };
});

ご覧のとおり、多くのイベントについて同じことが言えます。

個人的には、mouseenter(orclickなど) 関数の特別な機能が必要ない場合は、関数を使用することを好みます。on私の意見では、jQuery を使用する大きな利点の 1 つは、コードの冗長性が減り、読みやすくなることです。そして、私はあなたが訂正されるべきではないと思います。あなたを訂正した人になぜ彼がそうするのか尋ねてください.

于 2013-04-18T15:18:42.080 に答える
2

.click通常、またはのような特定のイベント$.postはショートカットです。.onこれらはand関数を使用するのと同じように機能し$.ajaxますが、通常は後者の方が柔軟性が高くなります。EGは、クリックのみをサブスクライブし.onながら、複数のイベントにバインドできます。.click関数にも同じことが当てはまり$.ajaxます。ショートカットには特定のデフォルトが設定されているため、さらに多くのオプションがあります。

于 2013-04-18T15:23:14.977 に答える
1

この 2 つの間に実質的な違いはありません。簡略化された関数 ( .click().mouseover()など) を呼び出し.on()て、実際にイベント ハンドラーをバインドします。直接使用する唯一の「利点」.on()は、2 番目の関数呼び出しによる追加のオーバーヘッドがないことです。ただし、それは非常に時期尚早の最適化であるほど十分に不十分である可能性が高いと思います。

于 2013-04-18T15:18:52.963 に答える
1

必ずしも間違っているわけではありませんが、通常の方法よりも利点があります。

イベントを親コンテナーに「バインド」する$(parent).on(event, target, function() { //foobar });ことで、新しいターゲット要素をコンテナーに追加できますが、jquery を繰り返してイベントをバインドする必要はありません。

于 2013-04-18T15:19:18.607 に答える