Mr.Daru 2018-02-08 06:39 采纳率: 76.5%
浏览 3489
已采纳

html通过js绑定click事件,无限调用。

问题1.
如题,通过js绑定click事件,无限调用。
js 结构

window.onload = function(){
    basecss();
    bdEvent()
    function bdEvent(){
    var li=document.querySelectorAll("#slider li");
    li[0].addEventListener("click", before(),true); 
    li[1].addEventListener("click", before(),true); 
    li[3].addEventListener("click", before(),true);
    li[4].addEventListener("click", before(),true);
    }
    function basecss(){
        ...
    };
    function before(){
        ...
    };
    function next(){
        ...
    };
}

html结构

 <body>
    <div id="slider">
        <ul>
            <li>
                <img src="1517301943(1).jpg">
                <a>0000</a>
            </li>
            <li>
                <img src="1.jpg">
                <a>0000</a>
            </li>
            <li>
                <img src="1.jpg">
                <a>0000</a>
            </li>
            <li>
                <img src="1.jpg">
                <a>0000</a>
            </li>
            <li>
                <img src="1.jpg">
                <a>0000</a>
            </li>
        </ul>
        </div>
</body>

问题2.
定义一个变量,然后写一个函数不能调用?我调用a是undefine

 window.onload = function(){
    basecss();
    bdEvent();
    var a="aaa";
    function bdEvent(){
    alert(a);
    }
  • 写回答

11条回答 默认 最新

  • Go 旅城通票 2018-02-08 06:58
    关注

    事件绑定错了,去掉(),加()是将before返回值作为click的处理函数,至于无限调用自己检查逻辑,肯定是有死循环代码了

     li[0].addEventListener("click", before(),true); 
    ==>
    li[0].addEventListener("click", before,true); 
    

    var申明的变量不管你在哪里var,预解析,会在作用域最先申明并赋值为undefined,只有执行到实际的赋值语句才会赋值,所以undefined没错,等价于下面的

      window.onload = function () {
            var a = undefined;////////////////
            basecss();
            bdEvent();//执行alert a,所以undefined,也不会报错
             a = "aaa";//执行到这才会赋值
            function bdEvent() {
                alert(a);
            }
        }
    

    =>javascript运行机制浅析

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿