登录  /  注册
首页 > web前端 > js教程 > 正文

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

不言
发布: 2018-08-15 17:31:18
原创
3979人浏览过

本篇文章给大家带来的内容是关于什么是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级事件处理。

  • 添加事件监听器:addEventListener(事件名,处理函数,布尔值)

  • 移除事件监听器:removeEventListener(事件名,处理函数)

    注意:事件名不带on。
    第一个值是事件名,第二个是处理函数,第三个布尔值,默认为false事件句柄在冒泡阶段执行,改为true的时候事件句柄在捕获阶段执行。这两个事件相同,但是在IE中不支持这两个属性,

  • IE下的事件监听器:attachEvent(事件名,处理函数),detachEvent(事件名,处理函数)
    注意:事件名带on。

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

  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中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号