document.write clears page

点点圈 提交于 2019-12-16 20:36:34

问题


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>

回答1:


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.




回答2:


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");



回答3:


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.




回答4:


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");



回答5:


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.




回答6:


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)}


来源:https://stackoverflow.com/questions/10873942/document-write-clears-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!