我注意到这一行
$('#opp-tabs input[type=text]:not(#newActionText), #opp-tabs textarea').live('keyup', function() {
onFormChanged();
});
在IE8中运行速度极慢,它在firefox和chrom中工作得很好,但在IE中却没有,说实话它是'不'这个词的余地,它如何定义这个不同的IE在IE中的正常速度运行?
答案 0 :(得分:4)
你真的应该确保选择器尽可能轻量级,如果在.live()
方法中使用,尤其是。发生的事情是,事件实际上绑定到document.body
,并且需要检查给定事件是否与原始选择器字符串匹配。这个过程可能非常昂贵,在你的情况下,它还需要调用 Sizzle ** ,这会使它更慢。
最佳案例解决方案,使用.on()
或.delegate()
来限制necesarry DOM冒泡。这意味着,您不会将事件处理程序绑定到body
,而是绑定到最近的共享父节点,这会提高整体性能。其次,更重要的是,改进那个选择器!
使用类名或诸如此类来查询您需要的节点,实际上它不会比当前状态差很多。
要优化当前表单,请尝试如下:
$('#opp-tabs input:text, #opp-tabs textarea').not('#newActionText').on('keyup', 'closest shared parent selector', function() {});
参考:.delegate(),.on()
** Sizzle是jQuery的javascript css-selector引擎</ sup>
答案 1 :(得分:1)
添加到@ jAndy的答案,您可以将其表示为
$('#opp-tabs input[type=text], #opp-tabs textarea').live('keyup', function() {
if(this.id != "newActionText") onFormChanged();
});