2009-11-24 9 views
8

je suppose que le code suivant:javascript: appel de fonction se

jQuery("#mybutton").click(function(){ 

    //do something 

}); 

Comment pourrais-je rappeler à cette fonction « anonyme » ?, je ne peux pas mettre un nom à cette fonction:

var xfun = function(){ 

    //do something 

} 

jQuery("#mybutton").click(xfun); 

Je peux faire quelque chose comme ceci:

var working = false; 
jQuery("#mybutton").click(function(){ 

    if (working){ 
    var _this = this; 
    _this._eventType = e.type; 
    setTimeout(function() { jQuery(_this).trigger(_this._eventType); }, 200); 
    return false; 
    } 
    //do something 

}); 

ce que j'ai besoin est quelque chose comme ceci:

var working = false; 
jQuery("#mybutton").click(function(){ 

    if (working){ 
    setTimeout(this_function, 200); 
    return false; 
    } 
    //do something 

}); 

merci.

EDIT:

Solution:

jQuery("#mybutton").click(function(){ 
    if (working){ 
    var fn = arguments.callee; 
    var _this = this; 
    setTimeout(function(){fn.call(_this);}, 200); 
    return false; 
    } 
    //do something  
}); 
+0

... et la question est? – OscarRyz

+2

@Oscar: la question est "comment réexécuter une fonction anonyme depuis la fonction anonyme?" –

Répondre

20

Vous pouvez en effet le nom de votre fonction anonyme:

jQuery("#mybutton").click(function doWork(){ 
    if (working){ 
    setTimeout(doWork, 200); 
    return false; 
    } 
    //do something  
}); 

Vous pouvez également utiliser arguments.callee:

jQuery("#mybutton").click(function(){ 
    if (working){ 
    setTimeout(arguments.callee, 200); 
    return false; 
    } 
    //do something  
}); 

J'irais avec le premier.

+0

+1 J'ai eu la même idée. – Gumbo

+0

merci beaucoup. –

+3

@andres: np. C'est une question importante compte tenu de la dépréciation de 'arguments.callee': https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee –

1

Pouvez-vous expliquer pourquoi vous ne pouvez pas nommer la fonction? Vous pouvez utiliser arguments.callee pour obtenir une référence à la fonction en cours, mais cela est déconseillé et je ne suis pas sûr de la quantité de support dont il dispose parmi les navigateurs actuels.

Questions connexes