2009-12-07 113 views
0

代码片段如下:JavaScript的范围问题

$(this).parents('td:first').next().find('option').customizeMenu('myMenu2'); 

这工作,但:

var listener = function(){ 
$(this).parents('td:first').next().find('option').customizeMenu('myMenu2'); 
}; 
listener(); 

不工作,为什么和如何解决?

回答

6

'this'在放入函数时不指向同一个对象,它指向当前函数(在您的情况下为'listener')。把它作为一个参数来代替,如果这是一个选项(这取决于你如何调用你的函数)。

var listener = function(obj){ 
$(obj).parents('td:first').next().find('option').customizeMenu('myMenu2'); 
}; 

listener(this); 
+0

+1为更快7秒。 – Kobi 2009-12-07 09:59:53

+0

:P现在,我觉得我必须upvote你(我会)。 ;) – 2009-12-07 10:00:33

3

this是函数。尝试:

var listener = function(element){ 
    $(element).parents('td:first').next().find('option').customizeMenu('myMenu2'); 
}; 
listener(this);