IE6标签事件动态绑定导致崩溃

JavaScript 2012-11-08 IE6,事件,崩溃

报错原因

前两天做一个用户列表的应用,右键用户头像弹出一个菜单选项。这应该是JS最容易实现的一个功能的,使用JS事件即可实现。但是测试的时候,其它浏览器都没有问题,唯独IE6报错:

这个问题,有点棘手。因为它不是单纯的JS报错。因为用户列表是动态创建的,即可能有一个用户进入房间就在列表里增加一个用户,离开一个用户就从列表里删除这个用户,不好调试,我改成静态的测试。发现没有崩溃,也没有报错。

正在左思右想,感觉IE6容错性能很低,就怀疑是JS动态创建绑定用户列表事件导致内存占用过多。因为用户列表是动态创建的,而绑定右键的方法是写在一个函数里。如:

function bind(){

    var obj = document.getElementsByTagName('li')

    for(var i=0;i

        obj[i].onclick=function(){ ... }

    }

}

每当用户列表发生改变(删除、或者添加、或者重建)时就调用一次绑定函数,经过查找资料,发现是IE6对JS内存释放的机制太落后导致。

比如我列表里有是个用户,并且已经绑定了右键侦听,然后我删除列表里这十个用户的DOM节点,在IE6里不会因为DOM节点删除而去自动释放侦听事件的资源,导致内存占用随着DOM节点的不断变化而越来越耗费内存资源,最终就报错崩溃。

解决方法

网上有人说,可以再删除DOM节点之前解除事件绑定在删除,这或许能解决。但我认为更有的方法是把事件写到标签里,如:

<button onclick="bind()">click</button>

这样的方式更好,删除DOM节点,事件也被释放了。

要么,你可以忽略IE6这种破烂的浏览器,一笑而过!

文字链接:《IE6标签事件动态绑定导致崩溃

文章地址:http://www.qttc.net/201211238.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 0

    Hi,你想第一个做沙发么?