Pourquoi, dans le code ci-dessous lors de l'appel de document.write
dans la fonction validator()
, les éléments de formulaire (la case à cocher et le bouton) sont supprimés de l'écran?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function validator() {
if (document.myForm.thebox.checked)
document.write("checkBox is checked");
else
document.write("checkBox is NOT checked");
}
</script>
</head>
<body>
<form name="myForm">
<input type="checkbox" name ="thebox"/>
<input type="button" onClick="validator()" name="validation" value="Press me for validation"/>
</form>
</body>
</html>
document.write()
est utilisé pour écrire dans le document stream .
Dans votre cas, le flux est probablement déjà fermé lorsque le gestionnaire onClick est appelé, car le chargement de votre document est terminé.
L'appel de document.write()
sur un flux de document fermé appelle automatiquement document.open()
, ce qui effacera le document.
Un document.write()
appelé après le chargement de la page écrasera le document actuel.
Vous souhaitez définir le texte d'un élément dans votre document. Si vous ajoutez un
<p id="message"></p>
à la fin de votre corps, alors vous pouvez appeler
document.getElementById("message").innerHTML = "your text here";
Ou avec la bibliothèque jQuery
$("#message").html("your text here");
Appeler document.write
after le document a été chargé implicitement appelle document.open
, ce qui efface le document actuel. (Comparez à l'appel document.open
pendant le chargement de la page, ce qui insère la chaîne dans le flux de documents; le document n'est pas effacé.)
document.write
est l’un des plus anciens vestiges de JavaScript ancien et doit généralement être évité. Au lieu de cela, vous souhaiterez probablement utiliser des méthodes de manipluation DOM pour mettre à jour le document.
vous pouvez utiliser
alert("Checkbox is checked");
ou si vous voulez l'afficher sur la page, créez d'abord un élément avec un identifiant "message" (vous pouvez écrire ce que vous voulez, mais n'oubliez pas, les identifiants doivent être uniques sur la page) comme
<div id="message"></div>
et ensuite utiliser
document.getElementById("message").innerHTML = "Checkbox is checked";
ou si vous utilisez jQuery:
$("#message").html("Checkbox is checked");
ou si vous utilisez un navigateur compatible avec la console (Firefox, Chrome, etc.)
console.log("Checkbox is checked");
au lieu de
document.write("Checkbox is checked");
document.write
n'est pas la meilleure solution car s'il y en a, oui TOUTE, une manipulation DOM en cours ou déjà arrivée, alors document.write()
ne fonctionne pas très bien car il modifie le document d'origine mais ignore les modifications apportées à l'arborescence DOM.
Rappelez-vous également que le navigateur affiche les éléments principalement à partir de DOM, et non à partir du document original.
function DisplayWrite(a) {
if (document.body) {
var x = document.createElement("div")
document.body.appendChild(x)
x.innerHTML = "</div>" + a
} else {
document.writeclear(a)
}
}
var document = new Object()
document.writeclear = document.write
document.write = function(x) {DisplayWrite(x)}