昨天呀,女盆友又问了一个奇怪的问题——
“喂,狗子,这个HTML页面怎么变成空白了,跟菜鸟教程上说的不一样啊!”
我——“???”
废话不多说,我去学习了,不然都不配有女盆友。。。
修炼之后,又悟到真谛啦,斯国一。。。
结论贴出来先
为DOM添加onclick方法时,默认会调用document的方法,即使不添加document.
这个前缀
<button onclick="write()"></button>
<!-- 该语句表示在onclick中执行语句document.write(),而不是添加一个onclick事件监听,监听函数为你自己在js中写的write()方法。
废话不多说,上代码
<!DOCTYPE html>
<html>
<head>
<title>家有小可爱</title>
</head>
<script type="text/javascript">
function write() {
console.log('this is write')
document.write('<p>document.write finished</p>')
}
</script>
<body>
<h1>this is h1</h1>
<button onclick="write()">write</button>
</body>
</html>
渲染的页面是这样的
点击write执行了document.write('<p>document.write finished</p>')
后,是这样的
直接变空白,title没有了,console.log输出也没有,element元素全部被清空。妈耶,有鬼呀
把函数名改成write1,一切正常,界面非空白,元素存在,console.log有输出
这是怎么回事???黑人问号脸
猜想:
- onclick中是可以执行js语句的,比如直
onclick="console.log(123)"
,这样点击后,控制台会直接输出123, - 而document中有一个wirte方法,前面的例子看起来就像主动调用了
document.wirte(“”)
,即往DOM中写入空一样——这样页面当然是空白了,而且也没有执行输出语句。 - DOM中onclick中填入方法名如果与document对象的方法相同时,默认会调用document的相关方法,且不用加document.
证明:
在控制台中直接输入document.
,可以看见它有clear这个方法
把write替换为clear后,界面没有任何反应,也没有日志输出,说明它默认调用了document.clear方法。
结论:
为DOM添加onclick方法时,默认会调用document的方法,即使不添加document.
这个前缀
<button onclick="write()"></button>
<!-- 该语句表示在onclick中执行语句document.write(),而不是添加一个onclick事件监听,监听函数为你自己在js中写的write()方法。