web-dev-qa-db-fra.com

setTimeout Internet Explorer

J'ai le javascript suivant dans MSIE:

setTimeout(myFunction, 1000, param );

cela semble fonctionner dans tous les navigateurs sauf Internet Explorer. le param ne vient tout simplement pas d'être transmis à la fonction. en regardant le débogueur, il est indéfini.

19
clamp

param dans Internet Explorer spécifie si le code dans myFunction est JScript, JavaScript ou VBscript Voir aussi: MSDN. Il ne se comporte pas comme les autres navigateurs.

Ce qui suit fonctionnera:

setTimeout(function() {
    myFunction(param);
}, 1000);

La ligne précédente ne reproduit pas exactement setTimeout dans Firefox, etc. Pour passer une variable non affectée par une mise à jour ultérieure de la variable param, utilisez:

setTimeout( (function(param) {
    return function() {
        myFunction(param);
    };
})(param) , 1000);
34
Rob W

Internet Explorer ne vous permet pas de passer de tels paramètres. Vous devrez le faire explicitement à partir de la fonction de rappel:

setTimeout(function(){
    myFunction(param);
}, 1000);

Citation de MDN :

Notez que la transmission de paramètres supplémentaires à la fonction dans la première syntaxe ne fonctionne pas dans Internet Explorer.

3
Joseph Silber

Jetez un coup d’œil à http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout

On dirait que vous aurez besoin de quelque chose comme ça:

setTimeout(function(){ myFunction(param) }, 1000);
1
mrmonroe

Ce n'est pas un paramètre. Apparemment, ce dernier argument dénote le langage de script.

Utilisez plutôt une fonction anonyme:

setTimeout(function() {
  myFunction(param);
}, 1000);
0
Blender

Utilisez une fonction anonyme:

setTimeout(function() { myFunction(param) }, 1000);

Que dis-tu de ça:

setTimeout(function(){
    myFunction(param);
}, 1000);
0
papaiatis

vous pouvez utiliser la fermeture:

setTimeout(function(){myFunction(param)}, 1000);
0
Vikram