• 技术文章 >web前端 >js教程

    js事件委托是什么?javascript事件委托的介绍

    不言不言2018-08-15 17:31:18原创3426

    本篇文章给大家带来的内容是关于什么是js事件委托?js事件委托的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    什么是js事件委托呢?他又有什么好处?说白了js事件委托就是利用冒泡的原理,把本应该添加到某个元素上的事件委托给他的父级,从而减少DOM交互达到网页优化。

        var oUl = document.getElementById("newsList");    
        //获取ul
        oUl.onclick = function(e){
                    //只有点击li时才会触发相应代码执行
                    var evt = e || event;                
                    var _target = evt.target || evt.srcElement; 
                    if(_target.nodeName.toUpperCase() == "LI"){     
                        console.log(_target.innerHTML);         
                    }
                }            
                /*nodeName 属性可依据节点的类型返回其名称。
                如果节点是一个元素节点 , nodeName 属性将返回标签名。
                如果节点是一个属性节点, nodeName 属性将返回属性名。
                其他节点类型, nodeName 属性将返根据不同的节点类型返回不同的节点名称。
                 toUpperCase() 转为小写
                */

    这样写就可以不用一次次遍历li只要对ul执行一次DOM就可以达到想要的效果。那什么是冒泡呢,为什么可以这样做?
    冒泡事件就是document到触发事件的那个节点一层层向下捕获直至事件源然后一层层向上冒泡。这就是事件冒泡,利用这个冒泡机制减少DOM操作,有一点要注意就是onclick不支持捕获事件,另有其他写法如下:

    oBox.addEventListener("click",function(){
                    console.log("click");
                },false);

    这种写法又叫做为DOM2级事件处理。

    有事件冒泡就有组织冒泡,阻止冒泡即不让事件一层层向上触发。以下方法可以阻止事件冒泡。

    1. return false ;

    2. preventDefault();

    3. window.event.cancelBubble = true;

    //兼容火狐 获取event方法function getEvent(){
        if(window.event){return window.event;}
        func = getEvent.caller;    while(func != null){        
        var arg0 = func.arguments[0];        
        if(arg0){            
        if((arg0.constructor == Event || arg0.constructor == MouseEvent
                    || arg0.constructor == KeyboardEvent)
                    || (typeof(arg0) == "object" && arg0.preventDefault
                    && arg0.stopPropagation)){                
                    return arg0;
                }
            }
            func = func.caller;
        }    return null;
    }//阻止冒泡到下一个事件function stopPropagations(){
        var ev = getEvent();    if (window.event) {
            ev.cancelBubble = true;
        }else if(ev.preventDefault){
            ev.stopPropagation();//阻止冒泡
        }
    }

    ps:如果不用事件委托,在页面添加节点的时候无法获取DOM事件,用事件委托就可以解决了

    相关推荐:

    js中的事件委托

    JavaScript实现事件委托方法详解

    以上就是js事件委托是什么?javascript事件委托的介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:js中验证数字的方法总结 下一篇:原生js如何实现拖拽事件(代码)
    Web大前端开发直播班

    相关文章推荐

    • Angular + NG-ZORRO快速开发一个后台系统• JavaScript详细解析之网络请求与远程资源• Angular如何对请求进行拦截封装?• 怎么获取Node性能监控指标?获取方法分享• react如何实现hooks?必须依赖 Fiber 么?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网