2012-03-05 19 views
17

Mam następujące javascript w MSIE:setTimeout Internet Explorer

setTimeout(myFunction, 1000, param); 

to wydaje się działać we wszystkich przeglądarkach z wyjątkiem Internet Explorer. Param po prostu nie jest przekazywany do funkcji. patrząc na debugger, jest niezdefiniowany.

+0

Wystarczy użyć anonimową funkcję ... –

Odpowiedz

32

param w Internet Explorer określa, czy kod w myFunction jest JScript, JavaScript lub VBScript Zobacz także: MSDN. Nie zachowuje się tak jak inne przeglądarki.

Poniższe zadziała:

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

Dotychczasowa linia nie dokładnie naśladować setTimeout Firefox itp przekazać zmienną, nienaruszone przez późniejszej aktualizacji do param zmiennej użytku:

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

dzięki! który z "params" jest tym, który faktycznie został przekazany? – clamp

+0

@clamp Parametr 'param' na dole jest oryginalną zmienną' param'. 'param' u góry jest zmienną lokalną dla funkcji samozwalającej. 'param' w środku rozdziela się na' param' na górze. –

+0

dziękuję! wszystko wydaje się działać teraz we wszystkich przeglądarkach, tylko niektóre narzędzia do przetwarzania postów, takie jak jshint i kompilator zamykania google, narzekają, że jest to nieprawidłowa składnia. ale myślę, że to powinno być kolejne pytanie. – clamp

3

Program Internet Explorer nie zezwala na przekazywanie takich parametrów. Musisz zrobić to wyraźnie z funkcji callback:

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

Cytat MDN:

pamiętać, że zdanie dodatkowe parametry do funkcji w pierwszej składni nie działa w Internecie Poszukiwacz.

0

To nie jest parametr. Najwyraźniej ten ostatni argument oznacza język skryptowy.

Zastosowanie anonimowa funkcja zamiast:

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

Użyj anonimową funkcję:

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

Jak ten temat:

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

można użyć zamknięcie:

setTimeout(function(){myFunction(param)}, 1000); 
Powiązane problemy