innerHTML "sincrono"

luke_80

Nuovo Utente
13 Dic 2008
12
0
0
Ciao a tutti,

volevo chiedere un suggerimento su come poter rendere sincrono l'inserimento dinamico di codice HTML attraverso innerHTML. In particolare vorrei far sì che l'istruzione successiva all'uso di innerHTML fosse eseguita solo dopo il completamento dell'inserimento del codice HTML

HTML:
<html>
<head>
<script>

myBody.innerHTML = "codice HTML";

eval(...)  // eseguita solo dopo il completamento di innerHTML :hammer:

</script>

<body id="myBody"></body>
</html>

ho provato utilizzando setTimeout("eval(...)", 100) e funziona, ma chiaramente potrebbe non funzionare su un pc più "lento". Qualche suggerimento?

Grazie, Luca
 

PoLe

MRW Moderator
6 Giu 2005
2.198
3
0
40
.: Venezia :.
www.bzconsulting.it
Ciao
Fai così (vedi parte in blu)
Codice:
<html>
<head>
<script>
[COLOR="blue"][B]function scrivi(){[/B][/COLOR]
myBody.innerHTML = "codice HTML";
[COLOR="blue"][B]}[/B][/COLOR]

</script>

<body id="myBody" [B][COLOR="blue"]onload="javascript:scrivi();"[/COLOR][/B]></body>
</html>

:byebye:
 

luke_80

Nuovo Utente
13 Dic 2008
12
0
0
ciao Pole,
in effetti il problema ce l'ho facendo proprio come hai scritto tu, scrivendo di fretta avevo omesso la onload:

HTML:
<html>
<head>
<script>

function Init(){
    myBody.innerHTML = "<table><tr id='tr1'> ... </table>";
     var index = 1;
     eval("tr" + index + ".bgColor = 'highlight';" );  // vorrei fosse eseguita solo dopo il completamento di innerHTML

</script>

<body id="myBody" onload="Init();"></body>
</html>

in pratica nella eval la riga con id "tr1" non viene "trovata" penso perche' non e' ancora stato completato l'inserimento dinamico del codice, infatti se uso una setTimeout("eval(...)", 100)...funziona, qualche idea?

Grazie :fonzie:
 

PoLe

MRW Moderator
6 Giu 2005
2.198
3
0
40
.: Venezia :.
www.bzconsulting.it
in pratica nella eval la riga con id "tr1" non viene "trovata" penso perche' non e' ancora stato completato l'inserimento dinamico del codice..
Allora ti consiglio di suddivere il tutto in 2 function, la prima che crea il codice dinamicamente, la secondache contiene l'eval.
Poi, nell'onload le richiami una dopo l'altra.

Ti faccio un esempio funzionante:
Codice:
<html>
<head>
<script>
function [COLOR="Blue"]prova[/COLOR](){
	document.body.innerHTML += "<div id='1'>Ciao</div>";
}

function [COLOR="Green"]prova2[/COLOR](){
	document.getElementById("1").innerHTML += " a tutti";
}
</script>
</head>
<body onload='[COLOR="blue"]prova[/COLOR]();[COLOR="green"]prova2[/COLOR]()'>

</body>
</html>

Salut!
 

luke_80

Nuovo Utente
13 Dic 2008
12
0
0
...sempre + difficile :eek: : ho lo stesso problema nel caricare dinamicamente HTML proveniente da una richiesta ad un server. Io faccio una richiesta al server con xmlHttpRequest, questo mi ritorna una stringa HTML (str) da inserire nella pagina web: ho qualche speranza di rendere sincrono innerHTML in questo caso :crying:

HTML:
<html>
<head>
<script>

function ServerAnswer(str){
    // dove str = "<table><tr id='tr1'> ... </table>";
     myBody.innerHTML = 
     var index = 1;
     eval("tr" + index + ".bgColor = 'highlight';" );  // vorrei fosse eseguita solo dopo il completamento di innerHTML

</script>

<body id="myBody"></body>
</html>

Grazie !!!
 

Discussioni simili