美文网首页
事件委托及移除事件处理程序

事件委托及移除事件处理程序

作者: Mika_I | 来源:发表于2018-11-01 19:57 被阅读0次

        在JavaScript中,添加到页面的事件处理程序数量直接关系到页面的整体运行性能,主要原因为:首先,每个函数都是对象,都会占用内存,内存中的对象越多,性能就越差。其次必须事先指定所有时间处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。

1.事件委托

        对“事件处理程序过多”的解决方案就是事件委托。事件委托利用了事件的冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。优点如下:
        ·  document对象很快就可访问,可以在页面生命周期的任何时间点上为他添加事件处理程序(无需dengdai DOMContentLoaded或load事件)。
        ·  在页面设置事件处理程序所花的事件更少,只添加一个事件处理程序所需的DOM引用更少,所花的事件也更少。
        ·  整个页面站用的内存空间更少,能够提升整体性能。

<!-- html代码 -->
<ul id = "someone"> 
     <li id = "name"> name </li>
     <li id = "age"> age </li>
     <li id = "address"> address </li>
</ul>

//js代码
var person = document.getElementById("someone");
person.addEventListenter("click",function(event){

    switch(event.target.id){
        case "name":
            document.title = '''title changed';
            break;
        case "age":
            location.href = "http://www.yxl.com";
            break;
        case "address":
            alert("address");
            break;
    }
};

2.移除事件处理程序

        在不需要的时候移除事件处理程序,也是解决上述问题的一个方案。内存中那些过时不用的“空事件处理程序”(dangling event handler)也是造成Web用用程序内存性能问题的主要原因。导致空事件处理程序两种情况:

第一种:从文档中移除带有事件处理程序的元素时。

<div id = "myDiv">
    <input type = "button" value = "Click me" id = "myBtn">
</div>

<script type = "text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){
        //do something
        btn.onclick = null;  //移除事假能处理程序
        document.getElementById("myDiv").innerHTML = "processing...";
    }

在事件处理程序中删除按钮也能阻止事件冒泡,目标元素在文档中是事件冒泡的前提。

第二种:页面卸载的时候

页面被卸载之前没有清理干净事件处理程序,那他们就会滞留在内存中,一般来说,岁好的做法是在页面卸载之前,先通过unload时间处理程序移除所有事件的处理程序。

相关文章

  • 事件委托及移除事件处理程序

    在JavaScript中,添加到页面的事件处理程序数量直接关系到页面的整体运行性能,主要原因为:首先,每个函数都是...

  • 事件委托

    事件委托对”事件处理程序过多”问题的解决方案就是事件委托,事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管...

  • js 事件委托 事件代理

    js 事件委托 事件代理 JavaScript高级程序设计上解释:事件委托就是利用事件冒泡,只指定一个事件处理程序...

  • DOM事件委托

    事件代理又叫事件委托,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可...

  • DOM 事件委托

    事件代理又叫事件委托,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可...

  • JavaScript 事件委托

    1. 事件委托 事件处理程序过多的解决方法就是事件委托,事件委托利用的是事件冒泡。事件冒泡:事件由最具体的元素接收...

  • jQuery事件操作

    简单方式注册/移除事件 注册:jq对象 .on(‘事件名 例如click’,‘事件处理程序’) 移除:jq对象.o...

  • js高级程序设计第14章(小结)

    1.事件委托 事件委托是解决事件处理程序过多的一种方法。它利用事件冒泡,管理目标元素的最高层元素的事件处理程序,刻...

  • jQuery中添加移除样式,事件等问题

    jQuery 事件 - unbind() 方法作用:unbind()用于移除被选元素的事件处理程序,该方法能够移除...

  • c# event事件

    官方注解:.NET Framework 中的事件模型基于事件委托,该委托将事件与其处理程序连接。 若要引发事件,需...

网友评论

      本文标题:事件委托及移除事件处理程序

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