扫码关注官方订阅号
人生最曼妙的风景,竟是内心的淡定与从容!
原因是你的 show() 方法是在 onload() 函数内部定义的,外面访问不到。HTML 的事件属性中调用的方法都需要在全局范围内定义
show()
onload()
把 show() 强制定义在 window 对象上,因为对于网页来说 window 就是全局对象
window
window.onload = function() { var oBox = document.getElementById("box"); window.show = function() { oBox.style.display = "block"; }; };
在 show 中去取 oBox,也就是 @rubine 的解答。
这个方法由于是在 DOM 生成前定义的脚本,有可能在 box 还没加入 DOM 树的时候就触发了事件,这时候在 show() 里取不到 box。
box
把脚本放在 </body> 前去就好。
</body>
写个闭包
window.show = (function() { var oBox; window.onload = function() { oBox = document.getElementById("box"); }; return function() { oBox.style.display = "block"; }; })();
把外层window.onload去掉,改成下面这样
<script> function show(){ document.getElementById(“box”).style.display="block"; }
你的show函数拿到外面来就行了。
show
看错了,同上
推荐将script标签写在body的闭合标签后面,渲染完dom再加载脚本。去掉window.onload,将script写在body后,你试试看。
函数作用域的问题,onclick的作用于的是全局作用域,onload里的show()是那个匿名函数的作用域,所以把show()放到外面就好
你写的函数在页面加载时就会被执行,这样的函数一般是用在页面需要初始化时,而你现在是需要在页面加载之后手动触发,使用的场景和具体的函数不对应
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
原因是你的
show()方法是在onload()函数内部定义的,外面访问不到。HTML 的事件属性中调用的方法都需要在全局范围内定义
方法一
把
show()强制定义在window对象上,因为对于网页来说window就是全局对象方法二
在 show 中去取 oBox,也就是 @rubine 的解答。
这个方法由于是在 DOM 生成前定义的脚本,有可能在
box还没加入 DOM 树的时候就触发了事件,这时候在show()里取不到box。把脚本放在
</body>前去就好。方法三
写个闭包
把外层window.onload去掉,改成下面这样
你的
show函数拿到外面来就行了。看错了,同上
推荐将script标签写在body的闭合标签后面,渲染完dom再加载脚本。去掉window.onload,将script写在body后,你试试看。
函数作用域的问题,onclick的作用于的是全局作用域,onload里的show()是那个匿名函数的作用域,所以把show()放到外面就好
你写的函数在页面加载时就会被执行,这样的函数一般是用在页面需要初始化时,而你现在是需要在页面加载之后手动触发,使用的场景和具体的函数不对应