全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 7288|回复: 6
打印 上一主题 下一主题

有会JS的大神吗。。。求解答!

[复制链接]
跳转到指定楼层
1#
发表于 2017-10-18 21:21:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
30金钱
在研究addLoadEvent函数,课本上面写的使用方法是
addLoadEvent(function1);
addLoadEvent(function2);
但是在我实际测试中,发现需要这么使用
addLoadEvent(function1());
addLoadEvent(function1());
否则,将只会执行function1。
我查询了相关的资料 发现有的说要加()有的说不要加。请问到底要不要加呢 有标准吗?
为什么window.onload就不用加呢?我测试了window.onload=func() 加了括号的也无错啊 。
一些问题 希望各位大神予以解答 万分感谢!

附上我测试的代码:

  1. function showPic(){
  2. var whichPic = document.getElementsByTagName("a");
  3. var i = 0;
  4.     for (; i < whichPic.length; i++) {
  5.         if(whichPic[i].getAttribute("class")=="pict"){
  6.             whichPic[i].onclick=function(){

  7.                 document.getElementById("ig").setAttribute("src",this.getAttribute("href"));
  8.                 document.getElementById("i1").firstChild.nodeValue=this.getAttribute("title");
  9.                 document.getElementById("i2").innerHTML=this.getAttribute("title");
  10.                 return false;

  11.             }
  12.         }

  13.     }
  14. }
  15. function createYuanSu(){
  16.     var tp = document.createElement("p");
  17.     var tt = document.createTextNode("你好世界!");
  18.     tp.appendChild(tt);
  19.     var bd = document.getElementsByTagName("body")[0];
  20.     bd.appendChild(tp);
  21. }

  22. function addLoadEvent(func){
  23.     var oldonLoad = window.onload;
  24.     if(typeof window.onload != 'function'){
  25.         window.onload=func;
  26.     }
  27.     else {
  28.         oldonload();
  29.         func();
  30.     }
  31. }

  32. addLoadEvent(createYuanSu());
  33. addLoadEvent(showPic());
复制代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title></title>
  5. </head>
  6. <body>
  7. <img src="logo.png" id="ig" alt="图片占位符"> <br />
  8. <a href="赞美太阳.png" title ="赞美太阳!" class = "pict">赞美太阳吧!</a><br />
  9. <a href="logo.png" title ="这是logo!!"class="pict">LOGO!</a> <br />
  10. <p>下面两条是由两种方法修改的</p><br />
  11. <p id = "i1" title ="这是logo">a1</p><br />
  12. <p id = "i2" >a2</p>
  13. <p>下面是由元素创建实现的</p>
  14. <script type="text/javascript" src="sc.js"></script>
  15. </body>
  16. </html>
复制代码

最佳答案

查看完整内容

不要括号,因为括号表示立即执行,因为执行了,所以看起来好像没有错,但就和你的事件绑定无关了。出现困惑的原因是你大小写写错了: 第二个oldonload应该是oldonLoad,或者都命名成oldOnLoad
2#
发表于 2017-10-18 21:21:45 | 只看该作者
本帖最后由 byss 于 2017-10-18 21:49 编辑

不要括号,因为括号表示立即执行,因为执行了,所以看起来好像没有错,但就和你的事件绑定无关了。出现困惑的原因是你大小写写错了:

  1. function addLoadEvent(func){
  2.     var oldonLoad = window.onload;
  3.     if(typeof window.onload != 'function'){
  4.         window.onload=func;
  5.     }
  6.     else {
  7.         oldonload();
  8.         func();
  9.     }
  10. }
复制代码


第二个oldonload应该是oldonLoad,或者都命名成oldOnLoad
3#
 楼主| 发表于 2017-10-19 15:41:12 | 只看该作者
byss 发表于 2017-10-18 21:48
不要括号,因为括号表示立即执行,因为执行了,所以看起来好像没有错,但就和你的事件绑定无关了。出现困惑 ...

感谢解答 解决了 是我少写了 window.onload=function(){}

4#
发表于 2017-10-19 15:56:06 | 只看该作者
veryxe 发表于 2017-10-19 15:41
感谢解答 解决了 是我少写了 window.onload=function(){}

对,现在这样可以实现真正的addLoadEvent功能,之前的写法onload事件队列只能有两个函数
5#
 楼主| 发表于 2017-10-19 16:03:43 | 只看该作者
byss 发表于 2017-10-19 15:56
对,现在这样可以实现真正的addLoadEvent功能,之前的写法onload事件队列只能有两个函数 ...

再请教一下。
window.onload=func();
window.onload=func
二者有区别吗?
6#
发表于 2017-10-19 16:15:53 | 只看该作者
veryxe 发表于 2017-10-19 16:03
再请教一下。
window.onload=func();
window.onload=func

有。
第一个表示func先立即执行,执行以后func函数的返回值作为onload的回调函数,如果func的返回值不是函数类型,那么这个赋值其实是无效的。
第二个表示func作为页面加载完成的回调函数,在页面加载完成后,才会执行func函数。
7#
 楼主| 发表于 2017-10-19 16:29:01 | 只看该作者
byss 发表于 2017-10-19 16:15
有。
第一个表示func先立即执行,执行以后func函数的返回值作为onload的回调函数,如果func的返回值不是 ...

万分感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-1-15 05:29 , Processed in 0.065545 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表