Javascript 为什么;窗口。仅加载“;单击按钮后是否不工作?

Javascript 为什么;窗口。仅加载“;单击按钮后是否不工作?,javascript,html,Javascript,Html,点击“测试html”按钮后,“完成4”不会显示,只显示“完成1,2,3” 示例如下: 试验 window.onload=function(){alert('Done 4');} 警报(“完成1”); 警报(“完成2”); 警报(“完成3”); 测试Html //由于“document.write()”是在DOM加载后调用的,因此所有文档都将被重新写入(预期行为!) 好吧,在重写DOM之后,“document.write()”似乎没有调用“document.close()”,所以需要手动调用

点击“测试html”按钮后,“完成4”不会显示,只显示“完成1,2,3”

示例如下:


试验
window.onload=function(){alert('Done 4');}
警报(“完成1”);
警报(“完成2”);
警报(“完成3”);

测试Html //由于“document.write()”是在DOM加载后调用的,因此所有文档都将被重新写入(预期行为!)
好吧,在重写DOM之后,“document.write()”似乎没有调用“document.close()”,所以需要手动调用它

因此,代码如下:

onclick='document.write(document.getElementById("TA_1").value);'>Test Html</button>
onclick='document.write(document.getElementById(“TA_1”).value);'>测试Html
更改为:

onclick='document.write(document.getElementById("TA_1").value); document.close();'>Test Html</button>
onclick='document.write(document.getElementById(“TA_1”).value);document.close();'>测试Html
下面的最终代码(现在“完成4”显示在“完成1,2,3”之后):


试验
window.onload=function(){alert('Done 4');}
警报(“完成1”);
警报(“完成2”);
警报(“完成3”);

测试Html
-由于“document.write()”在DOM加载后被调用,所有文档都将被重新写入(预期行为!)
-重写DOM后,“document.write()”似乎没有调用“document.close()”,所以需要手动调用!
对于多次调用“window.onload”的问题,如下图:

(“完成1,2”之后不显示“完成结束”)

原始Html
文本区域Html(重新编写DOM-替换原始Html)
window.onload=function(){alert('Done End');};
警报(“完成1”);
警报(“完成2”);
//________________________________________________________________
window.onload=function(){document.write(document.getElementById(“TA_1”).value);document.close();};
//由于“document.write()”是在DOM加载后调用的,因此所有文档都将被重新写入
//似乎在重写DOM之后,“document.write()”并没有调用“document.close()”,所以需要手动调用它!
解决方案是使用“setTimeout()”:

(“完成1,2”之后显示“完成结束”):

原始Html
文本区域Html(重新编写DOM-替换原始Html)
window.onload=function(){alert('Done End');};
警报(“完成1”);
警报(“完成2”);
//________________________________________________________________
setTimeout(function(){document.write(document.getElementById(“TA_1”).value);document.close();},1);
//由于“document.write()”在DOM加载后1毫秒被调用,因此所有文档都将被重新写入
//似乎在重写DOM之后,“document.write()”并没有调用“document.close()”,所以需要手动调用它!

document.write()
加载页面后,将完全删除原始页面,包括与之关联的所有脚本。@Pointy,但“window.onload”与原始页面html不关联,它与“textarea”元素内的html代码关联您的html标记无效;
中只能包含纯文本。当页面完成后调用
document.write()
时,它会隐式打开一个全新的文档,删除旧页面。很抱歉@Pointy,但我认为您没有理解这里的要点!无论如何,谢谢你的帮助
document.write
window.onload
都是过时的、不受欢迎的做事方式。这个问题和答案更可能让新学员感到困惑,因为他们描述的是根本不好的做事方式。
<div style="color:red;"> Original Html </div>

<textarea id="TA_1"> <!-- _________________________________________ -->

<!DOCTYPE html>

<div style="color:green;"> Text Area Html (DOM Re-Written - Original Html Replaced) </div>

<script>
window.onload = function(){alert('Done End');};
alert('Done 1');
alert('Done 2');
</script>

</textarea>

<script>   //________________________________________________________________

setTimeout(function(){document.write(document.getElementById("TA_1").value); document.close();}, 1);
//Since "document.write()" is called 1 milliseconds after DOM load, all the document will be re-written
//It seems that after re-writing DOM, "document.write()" does not call "document.close()", so it need to be called manually! 

</script>