1

私は、このインスタンスで ref の厄介な変数宣言を取り除こうとしています。各スコープから出て、オンコールの「this」を取得する方法があると確信しています。方法がわかりません。

$(document).on('click', '.item', function(){

    var ref = $(this).attr('data-id');

    $.each(t, function(){
        if(this.id == ref){
            //action
            return false;
        }
    });
}

これは実際には生か死かではなく、コードをクリーンアップしようとしているだけです。

4

3 に答える 3

3

これを行う方法がありeventます。イベント ハンドラに自動的に渡される参照を使用します。

$(document).on('click', '.item', function(e) {
    $.each(t, function(){
        if (this.id == $(e.target).attr('data-id')) {
            //action
            return false;
        }
    });
}

しかし、コードの実行中に他のことをするための時間が増える以外には、何も得られません。;)

于 2012-08-23T19:36:13.763 に答える
3

実はできることがあります。関数をコンテキストにバインドできます。すでに jQuery を使用しているため、パラメーター関数とコンテキストを取り、その関数をそのコンテキストにバインドして新しい関数を返す jQuery.proxy を使用できます。

これを読んで少し理解してください: http://www.robertsosinski.com/2009/04/28/binding-scope-in​​-javascript/

次に、これを見てください: http://api.jquery.com/jQuery.proxy/

これが少し役立つことを願っています... :)

于 2012-08-23T19:36:18.990 に答える
1

あなたの意図が何であるかはわかりませんが、単にこの元の要素を参照する場合:

$(document).on('click', '.item', function(){
    var that = this;
    $.each(function(){
       // use 'that' however you'd like
       if ($(that).data().id == 'whatever') ...
     }
});

javascript でスコープを「離れる」ことはできません。親スコープで宣言を参照するだけです。

于 2012-08-23T19:32:34.600 に答える