Envoyé par
Herode
J'ajouterai que document.write écrit dans le flux
à l'endroit où il est invoqué. Dans le cas présent, ça revient à ajouter une <form> à l'intérieur du gestionnaire onload de la balise <body> :
<body onLoad="javascript:<FORM> <INPUT TYPE='button' VALUE='Boton' OnClick='loadpage()'> </FORM>">
Dans le cas présant, je ne crois pas que cela ce produise comme ca
Il ne s'agit pas d'une écriture dans le flux mais d'une écriture hors-flux (au momment de la gestion de l'évenement onload). Dans ce cas, la fonction réinitialise totalement le document... dans le cas présent, c'est comme si tu avais mis dans ton fichier HTML ceci :
<FORM> <INPUT TYPE='button' VALUE='Boton' OnClick='loadpage()'> </FORM>
Autrement dit, ta fonction loadpage n'est pas déclarée, il n'y a pas d'element HTML, pas d'element HEAD, pas d'élément BODY, ... pour t'en convaincre essaie de mettre ceci en onload de la balise body :
document.write("Ce message s'affiche-t-il ?");alert(document.body.innerHTML);
C'est pour cette raison que son utilisation est fortement déconseillée, elle n'a pas un effet constant, tout dépand du momment ou elle est executée.... si entre <body> et </body> tu fais
setTimeout("document.write('Hello Asynchrone')",0)
, la méthode est exécutée hors flux, et détruit donc le document en cours.... seulement tout cela est à la gestion du navigateur, qui ne manque jamais d'ingéniosité quand il s'agit de faire défférement des autres navigateurs
Je déconseille aussi la méthode document.body.innerHTML += car elle détruit les liens des objets... exemple :
1 2 3 4 5 6 7
| var Button1 = document.createElement("button")
Button1.innerHTML="Cliquer ici"
document.body.appendChild(Button1)
document.body.innerHTML+="<br /> Ce texte est après le boutton... Tout semble ok point de vue visuel"
Button1.onclick=function () {
alert("Ce message n'aparaitra pas car Button1 n'a plus une référence au Button 'visuel'")
} |
Partager