我有这样的案例 -
$('<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)
引用?
答案 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));
});
});
答案 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字段的值。