最近在做一个项目,在弄完以后,FF下测试完全没有问题。但是在IE8下使用,任何操作都会占用大量CPU,使在输入框打字都非常缓慢。后来根据对JS方法逐个屏蔽,发现在对keyup,keydown,mouseover等事件监听进行屏蔽后,网页的输入操作正常。请大神指教为什么在IE8下对事件监听会出现这么大的影响呢?怎么解决,贴一个代码片段,这是对回车事件的监听。
$(".inputIfm,.imGroupMessage").live({
keydown: function(e) {
if (e.keyCode == 13) {
if ($(".chatWindow:visible").length > 0) {
insertMessage();
$(".inputIfm,.imGroupMessage").val("")
} else if ($(".im_groupWindow:visible").length > 0) {
insertGroupMessage();
$(".inputIfm,.imGroupMessage").val("")
} else {
return false
}
}
},
keyup: function(e) {
if (e.keyCode == 13) {
if ($(".chatWindow:visible").length > 0 || $(".im_groupWindow:visible").length > 0) {
$(".inputIfm,.imGroupMessage").val("")
} else {
return false
}
}
}
})
})(jQuery);
$(".inputIfm,.imGroupMessage").live({
keydown: function(e) {
if (e.keyCode == 13) {
if ($(".chatWindow:visible").length > 0) {
insertMessage();
$(".inputIfm,.imGroupMessage").val("")
} else if ($(".im_groupWindow:visible").length > 0) {
insertGroupMessage();
$(".inputIfm,.imGroupMessage").val("")
} else {
return false
}
}
},
keyup: function(e) {
if (e.keyCode == 13) {
if ($(".chatWindow:visible").length > 0 || $(".im_groupWindow:visible").length > 0) {
$(".inputIfm,.imGroupMessage").val("")
} else {
return false
}
}
}
})
})(jQuery);
1. dom查找太频繁
2. jquery选择器写法有问题,导致jquery选择器性能低下,尤其是在IE8及之前版本
3. 滥用live解决办法:
1. 合理利用缓存
2. 使用符合css规则的jquery选择器,避免使用 :visible这种形式。
3. 用delegate替代live