2009-12-07 169 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);