2009-12-07 6 views
0

extrait de code comme suit:javascript question portée

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

Cela fonctionne, mais:

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

ne fonctionne pas, pourquoi et comment y remédier?

Répondre

6

'this' ne pointe pas sur le même objet quand il est placé dans une fonction, il pointe vers la fonction en cours (dans votre cas 'listener'). Prenez-le comme paramètre à la place, si c'est une option (cela dépend de la façon dont vous appelez votre fonction).

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

listener(this); 
+0

+1 pour être 7 secondes plus rapide. – Kobi

+0

: P Maintenant, je pense que je dois vous upvote (et je le ferai). ;) –

3

this est la fonction. Essayez:

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