JavaScript一个通用于代理和不代理的绑定事件函数

这篇文章主要关于js一个通用的绑定事件函数。绑定事件在我们开发的过程中会经常用到。写一个通用的函数是很必要的。
这里先讲一下代理。如一下代码,ul中有很多个li,而且li还有可能增加。如果要为每个li添加一个点击事件,操作起来将比较麻烦,代码量大不简洁,占内存。这时可以将事件代理到ul上,当点击li时,由于事件冒泡,ul上也起作用,之后再判断是点击那个li即可。

<ul id="uid">
    <li id="id1">id1</li>
    <li id="id2">id2</li>
    <li id="id3">id3</li>
    <li id="id4">id4</li>
    <li id="id5">id5</li>
    ...
</ul>

这里也可以提一下,事件的代理的好处是:代码简洁和减少浏览器内存占用。

说完了事件代理,下面来到本文章的重点,通用绑定事件函数。废话不多说,直接上代码。

 /**
     * 一个通用代理和不代理的绑定事件函数
     * @param  {[type]}   elme     [要绑定事件元素]
     * @param  {[type]}   type     [事件类型]
     * @param  {Function} fn       [处理函数]
     * @param  {[type]}   selector [可选参数,要代理事件的元素]
     * @return {[type]}            [无]
     */
    function bindEvent(elme, type, fn, selector){

        elme.addEventListener(type, function(e){
            var target;
            if(selector){//使用代理
                target = e.target;//获取触发事件的元素
                if(target.mathchs(selector)){
                    fn.call(target,e);
                }
            }else{
                fn(e);
            }

        });
    }

函数比较简单,就不多解释。下面运用这个通用函数,写两个例子。

    //使用代理,为每一个li将点击事件代理在父级元素ul上
    var ul = document.getElementById('uid');
    bindEvent(ul, 'click', function(e){
        console.log(this.innerHTML);
    },'li');

    //不使用代理
    var l1 = document.getElementById('id1');
    bindEvent(l1, 'click', function(e){
        console.log(l1.innerHTML);
    });

这篇文章就到这了,记录学习心得,如有错误,恳请指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值