最近在做一个项目,在弄完以后,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);

解决方案 »

  1.   

    还补充一个问题,对于数据的拉取JSON格式的解析遍历在IE8下也会非常的慢。求解释啊
      

  2.   

    这样慢肯定是会慢的,但不至于你说的那样,估计你的html代码也不是很规范
      

  3.   

    我前段时间也是弄的输入框输入字符自动提示,IE死慢死慢的,但是FF就很快,也很费解
      

  4.   

    html代码不规范也会导致吗?举个例子!~
      

  5.   

    原因很简单,
    1. dom查找太频繁
    2. jquery选择器写法有问题,导致jquery选择器性能低下,尤其是在IE8及之前版本
    3. 滥用live解决办法:
    1. 合理利用缓存
    2. 使用符合css规则的jquery选择器,避免使用 :visible这种形式。
    3. 用delegate替代live