2011-10-12 12 views
5

In questo demo, ho ottenuto diversi output, se uso (no wrap) o (onLoad).no wrap (head) vs onLoad

La mia domanda è, in file html, per ottenere un avviso corretto: 1,2,3,4 quale modifica è necessaria nel codice? Con un semplice carico di dojo ho ottenuto sempre 4 a tutti gli avvisi:

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script> 

<script type="text/javascript"> 
    var slider = []; 

    for (i = 0; i < 4; i++) { 

     slider[i] = function() { 

      alert([i]); 

     }; 
     dojo.addOnLoad(slider[i]); 
    } 
    </script> 

risposta

3

si potrebbe usare un closure:

var slider = []; 

for (i = 1; i < 5; i++) { 

    slider[i] = (function (i) { 

     return function() { alert([i]); } 

    })(i); 
    dojo.addOnLoad(slider[i]); 
} 

Ciò farà risparmiare i in un altro ambito funzioni salvataggio dello stato. Senza la chiusura, i ha ambito con la funzione originale.

+0

uomo perfetto, grazie – anvd

0

Il valore di i è 4 alla fine del ciclo, che è quello che le funzioni vedranno quando sono chiamati. Qualcosa del genere dovrebbe funzionare:

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script> 

<script type="text/javascript"> 
var slider = []; 

for (i = 0; i < 4; i++) { 
    eval("slider[i] = function() { alert([" + i + "]);};"); 
    dojo.addOnLoad(slider[i]); 
} 
</script> 

Edit: bene si potrebbe anche provare a fare il conteggio quando le funzioni vengono chiamate piuttosto che quando sono definite. per esempio.

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script> 

<script type="text/javascript"> 
var slider = []; 
var onLoadCounter = 0; 

var onLoadCallback = function() { 
    alert(onLoadCounter); 
    onLoadCounter++; 
}; 

for (i = 0; i < 4; i++) { 
    slider[i] = onLoadCallback; 
    dojo.addOnLoad(slider[i]); 
} 
</script> 
+0

È l'alternativa unica? Se è così, otterrò un grande errore (c'è più codice) – anvd

+2

Non usare 'eval'. È lento e difficile da eseguire il debug. – Quentin