0

私はこのようなケースがあります-

$('<first-selector>').each(function(){
    $(this).click(function(){
        $('<second-selector>').click(function(){
           /* Here I want to use the top $(this) reference to do some business. 
              I don't want to use like var thisObj = $(this) and refer it inside          
              the click function*/
        });
    });
});

$(this)別のオブジェクト内で参照を使用するにはどうすればよいですか?

4

6 に答える 6

4

$.proxyを使用する

$('div').each(function(){
    $(this).click(function(){
        $('p').click($.proxy(function(){
           console.log($(this)); // returns <div>
           /* Here I want to use the top $(this) reference to do some business. 
              I don't want to use like var thisObj = $(this) and refer it inside          
              the click function*/
        }, this));
    });
}); 

デモ: http: //jsfiddle.net/TRw4X/

于 2012-09-25T12:47:52.600 に答える
0

したがって、2番目の関数内の最初の関数の$(this)を使用して、それを$(this)と呼びますか?jQueryはthis-contextを維持しているため、これは不可能です。次のようなもので実行する必要があります。

$('<first-selector>').each(function()
{
    var first = $(this);

    first.click(function()
    {
        $('<second-selector>').click(function()
        {
            var second = $(this);
            // do something with first and second.
        });
    });
});
于 2012-09-25T12:44:28.330 に答える
0

これは最善の解決策ではありませんが(他の解決策が示唆するように変数を介して参照する必要があるため)... 2番目のセレクターが最初のセレクターの子である場合はいつでもparent()メソッドを使用できます。

$('<first-selector>').each(function(){
    $(this).click(function(){
        $('<second-selector>').click(function(){
          /*$(this) is now referencing <second-selector> and by adding parent() it will go up the elements until it find the requested selector*/
          $(this).parents('<first-selector>').doSomething();
        });
    });
});
于 2012-09-25T12:44:39.047 に答える
0

jQueryイベントでオブジェクトの参照を渡すことができます。

$('<first-selector>').each(function(){
    $(this).click($(this),function(){
        $('<second-selector>').click(function(e){
           var $elem = e.data.
           /* Here I want to use the top $(this) reference to do some business. 
              I don't want to use like var thisObj = $(this) and refer it inside          
              the click function*/
        });
    });
});
于 2012-09-25T12:45:55.220 に答える
0

質問を「解決」する唯一の方法は、jQueryを使用しないことです。

それでも、質問にjQueryのタグを付けます。

ここで正確に何をしたいのですか、そしてなぜあなたは簡単な(そしてクロージャを使用する一般的なjavascriptイディオム)を却下するのですか?

于 2012-09-25T12:46:09.260 に答える
0

この場合、DOMレディでは、すべてのファーストセレクターがクリックイベントハンドラーにバインドされます。ファーストセレクターをクリックすると、セカンドセレクターがクリックイベントにバインドされます。最初のセレクターに関連する$(this)を使用するには、次のようにコードを記述する必要があります。

$('<first-selector>').each(function(){
$(this).click(function(){
    var oldthis = $(this);
    $('<second-selector>').click(function(){
       alert(oldthis.val());
    });
});

});

ファーストセレクタータグがセカンドセレクタータグと同じでないことを確認してください。フォームでこれを試してください

jQuery(document).ready(function(){
    jQuery('input[type=text]').each(function(){
        jQuery(this).click(function(){
            var oldthis = jQuery(this);
            jQuery('input.hello').click(function(){
                alert(oldthis.val());
            });
        });
    });
});

最初に入力テキストフィールドをクリックします。helloクラスのボタンがクリックされると、入力されたTEXTフィールドの値を警告します。

于 2012-09-25T12:51:49.123 に答える