20

Why in the code below upon the call of document.write in the function validator() the form elements (the checkbox and button) are removed from screen?

<!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>
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
C graphics
  • 7,308
  • 19
  • 83
  • 134

6 Answers6

64

document.write() is used to write to the document stream.

In your case, the stream is most probably already closed when the onClick handler is called, because your document has finished loading.

Calling document.write() on a closed document stream automatically calls document.open(), which will clear the document.

Jerome WAGNER
  • 21,986
  • 8
  • 62
  • 77
  • 2
    @JeromeWAGNER—No. Read the [*specification*](http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-72161170) linked from the page you referenced: "*Open a document stream for writing. If a document exists in the target, this method clears it.*" – RobG Jun 13 '15 at 06:55
14

A document.write() called after the page loads will overwrite the current document.

You want to set the text of some element within your document. If you add a

<p id="message"></p>

to the end of your body, then you can call

document.getElementById("message").innerHTML = "your text here";

Or with the jQuery library

$("#message").html("your text here");
Andy Jones
  • 6,205
  • 4
  • 31
  • 47
12

Calling document.write after the document has been loaded implicitly calls document.open, which clears the current document. (Compare to calling document.open while the page is loading, which inserts the string into the document stream; it does not clear the document.)

document.write is one of the oldest vestiges of ancient JavaScript, and should generally be avoided. Instead, you probably want to use DOM manipluation methods to update the document.

josh3736
  • 139,160
  • 33
  • 216
  • 263
3

you can use

alert("Checkbox is checked");

or if you will be displaying it on page, first create an element with an id "message" (you can write anything you want, but remember, id's have to be unique on the page) like

<div id="message"></div>

and then use

document.getElementById("message").innerHTML = "Checkbox is checked";

or if you are using jQuery:

$("#message").html("Checkbox is checked");

or if you are using a console enabled browser (Firefox, Chrome etc.)

console.log("Checkbox is checked");

instead of

document.write("Checkbox is checked");
Taha Paksu
  • 15,371
  • 2
  • 44
  • 78
1
        var x = document.createElement("div")
        document.body.appendChild(x)
0

document.write is not best way to go as if there is any, yes ANY, DOM manipulation happening or happened already then document.write() does not work very well as it modifies original document but ignores any changes to DOM tree.

Also remember that browser displays things primarily from DOM, not from original document.