如何在另一个函数中使用$(this)引用?

时间:2012-09-25 12:37:35

标签: javascript jquery jquery-selectors this

我有这样的案例 -

$('<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)引用?

6 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

所以你想从第二个函数中的第一个函数中使用$(this)并将其称为$(this)?这是不可能的,因为jQuery维护了这个上下文。你必须运行这样的东西:

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

    first.click(function()
    {
        $('<second-selector>').click(function()
        {
            var second = $(this);
            // do something with first and second.
        });
    });
});

答案 2 :(得分:0)

虽然这不是最好的解决方案(因为你应该像其他解决方案建议的那样通过变量引用它)...如果第二个选择器是第一个选择的孩子,你总是可以使用parent()方法。 / p>

$('<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();
        });
    });
});

答案 3 :(得分: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*/
        });
    });
});

答案 4 :(得分:0)

“解决”你的问题的唯一方法是不使用jQuery。

然而,您使用jQuery标记了您的问题。

你到底想做什么,以及为什么简单(以及使用闭包的常见javascript惯用语)被你解雇了?

答案 5 :(得分:0)

在这种情况下,在DOM就绪时,所有第一选择器都与click事件处理程序绑定。在单击第一个选择器时,第二个选择器将绑定到click事件。要使用$(this)哪个reperesent first-selector,你必须将代码编写为

$('<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字段的值。