美文网首页JavaScript学习笔记
DOM批量绑定事件的三种方法

DOM批量绑定事件的三种方法

作者: riceAndshine | 来源:发表于2016-12-02 10:50 被阅读0次

我们应该都遇到过要给很多 dom 节点绑定同一事件的问题,但是当我们遍历的时候其中参数 i 的处理如果不小心的话就会处理的有点问题.

应用不同的场景,有下面三种解决方法 :

  • 第一种,如果我们需要在遍历的时候从dom节点中获取需要的数据,我们就可以直接在循环体内添加时间绑定就可以了.
function bindClick1() {
    var memberList = $api.byId('memberList');
    var item = $api.domAll(memberList,'.item');
    for (var i = 0,itemLen = item.length; i < itemLen; i++) {
        $api.addEvt(item[i],'click',function () {
              itemId = $api.attr(this,'id');
              alert(i);
        });         
    }
}
  • 第二种,当我们不是在dom中获取数据(通常都是..)的时候.我们就可以用闭包来处理
function bindClick3() {
    var arr = [1,2,3];
    var item = $api.domAll($api.byId('memberList'),'.item');
    function bibao() {
        return function (i) {
            $api.addEvt(item[i],'click',function () {
            alert(arr[i]);
            }); 
        }
    }
    for (var i = 0,itemLen = item.length; i < itemLen; i++) {
        var func = bibao();
        func(i);           
    }
}

利用闭包的特性来保存变量,阻止变量的提升.
可以简单的写成下面的形式

    function bindClick2() {
        var arr = [1,2,3];
        var item = $api.domAll($api.byId('memberList'),'.item');
        for (var i = 0,itemLen = item.length; i < itemLen; i++) {
            (function (j) {
                $api.addEvt(item[j],'click',function () {
                    alert(arr[j]);
                }); 
            })(i)                
        }
    }
  • 第三种最简单 利用es6的关键词 let .需要注意的是兼容性问题(可以用babel工具来转换使用)
    function bindClick() {
        var arr = [1,2,3,4];
        var item = $api.domAll($api.byId('memberList'),'.item');
        for (let i = 0,itemLen = item.length; i < itemLen; i++) {
            $api.addEvt(item[i],'click',function () {
                alert(arr[i]);
            });           
        }
    }

相关文章

  • DOM的事件绑定、事件监听

    JS有三种常用的绑定事件的方法 在DOM元素上直接绑定 在JS代码中绑定 在JS中绑定事件监听函数 在DOM中直接...

  • addEventListener的第三个参数的作用

    从头说起 如果需要给html中的某个dom绑定事件,有三种常用方法: 1.直接写在dom的事件钩子上 这种方法破坏...

  • 16_JS事件绑定

    JavaScript三种绑定事件的方式 直接在DOM里绑定事件 onXxx addEventListener 那么...

  • DOM批量绑定事件的三种方法

    我们应该都遇到过要给很多 dom 节点绑定同一事件的问题,但是当我们遍历的时候其中参数 i 的处理如果不小心的话就...

  • DOM0和DOM2级事件

    DOM0和DOM2级事件 事件绑定的两种方法 DOM0级事件绑定 curEle.onclick=function(...

  • JavaScript事件

    事件分类 事件的绑定方法 通过标签绑定事件 通过js获取DOM元素绑定事件 通过addEventListener属...

  • 事件生僻知识学习笔记

    DOM2 级事件包括: 事件捕获,处于目标,事件冒泡 绑定事件方法: HTML上直接绑定 DOM0级事件处理程序 ...

  • JS事件绑定的常用方式实例总结

    常用的事件绑定的几种方式有三种: 直接在 dom 元素上进行绑定。 用 on 绑定。 用 addEventList...

  • DOM的事件处理方式

    DOM的事件处理方式通常有三种方式: 在HTML中的事件处理方式 DOM元素对象的属性事件绑定处理方式 DOM元素...

  • dom 事件绑定

    dom绑定事件有两种方法: onclickonclick绑定事件,分为两种方法,一种是行内绑定,一种是动态绑定行内...

网友评论

    本文标题:DOM批量绑定事件的三种方法

    本文链接:https://www.haomeiwen.com/subject/bugfmttx.html