2012-03-05 37 views
17

Ho il seguente javascript in MSIE:setTimeout Internet Explorer

setTimeout(myFunction, 1000, param); 

questo sembra funzionare in tutti i browser tranne Internet Explorer. il parametro non viene semplicemente inoltrato alla funzione. guardando il debugger, non è definito.

+0

utilizzare solo una funzione anonima ... –

risposta

32

param in Internet Explorer consente di specificare se il codice è myFunction JScript, JavaScript o VBScript Vedi anche: MSDN. Non si comporta come gli altri browser.

Quanto segue funziona:

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

La riga precedente non è esattamente imitare setTimeout in Fuoco ecc Per passare una variabile, non influenzate da un aggiornamento successivo alla param variabile, uso:

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

grazie! quale dei "param" è effettivamente passato? – clamp

+0

@clamp Il 'param' in basso è la variabile' param' originale. 'param' in alto è una variabile locale per la funzione auto-invocante. 'param' al centro risolve in' param' in alto. –

+0

grazie! tutto sembra funzionare ora in tutti i browser, solo alcuni strumenti di post-elaborazione come jshint e il compilatore di chiusura di google si lamentano che questa è una sintassi non valida. ma suppongo, questa dovrebbe essere un'altra domanda allora. – clamp

3

Internet Explorer non consente di passare parametri del genere. Dovrete farlo in modo esplicito dalla funzione di callback:

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

Citazione di MDN:

Si noti che il passaggio di parametri aggiuntivi per la funzione nella prima sintassi non funziona in Internet Esploratore.

0

Questo non è un parametro. Apparentemente, quest'ultimo argomento sta a indicare il linguaggio di scripting.

Usa una funzione anonima invece:

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

Utilizzare una funzione anonima:

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

ne dite di questo:

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

è possibile utilizzare la chiusura:

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