setTimeout Internet Explorer - PullRequest
       9

setTimeout Internet Explorer

21 голосов
/ 05 марта 2012

У меня есть следующий javascript в MSIE:

setTimeout(myFunction, 1000, param );

Это работает во всех браузерах, кроме Internet Explorer.параметр просто не перенаправляется в функцию.глядя на отладчик, он не определен.

Ответы [ 7 ]

35 голосов
/ 05 марта 2012

param в Internet Explorer указывает, является ли код в myFunction JScript, JavaScript или VBscript См. Также: MSDN .Он не работает как другие браузеры.

Будет работать следующее:

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

Предыдущая строка не совсем имитирует setTimeout в Firefox и т. Д. Чтобы передать переменную, незатронутуюпозже обновите переменную param, используйте:

setTimeout( (function(param) {
    return function() {
        myFunction(param);
    };
})(param) , 1000);
3 голосов
/ 05 марта 2012

Internet Explorer не позволяет передавать такие параметры. Вам придется сделать это явно из функции обратного вызова:

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

Цитата из MDN :

Обратите внимание, что передача дополнительных параметров функции в первом синтаксисе не работает в Internet Explorer.

1 голос
/ 05 марта 2012

Посмотрите на http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout

Похоже, вам понадобится что-то вроде этого:

setTimeout(function(){ myFunction(param) }, 1000);
0 голосов
/ 05 марта 2012

Вы можете использовать закрытие:

setTimeout(function(){myFunction(param)}, 1000);
0 голосов
/ 05 марта 2012

Как насчет этого:

setTimeout(function(){
    myFunction(param);
}, 1000);
0 голосов
/ 05 марта 2012

Использовать анонимную функцию:

setTimeout(function() { myFunction(param) }, 1000);
0 голосов
/ 05 марта 2012

Это не параметр.Очевидно, последний аргумент обозначает язык сценариев.

Вместо этого используйте анонимную функцию:

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