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

所以你想在第二个函数中使用第一个函数中的 $(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

虽然这不是最好的解决方案(因为您应该像其他解决方案建议的那样通过变量引用它)......如果第二个选择器是第一个选择器的孩子,您始终可以使用 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 就绪的情况下,所有第一个选择器都与 click 事件处理程序绑定。单击第一个选择器时,第二个选择器绑定到单击事件。要使用代表第一选择器的 $(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 回答