2010-11-19 58 views
0

我面临着一个很奇怪的问题。我在我的html中有选项卡和子选项卡,当我点击选项卡/子选项卡上的“activeContent”类时,它就放在它上面。如果我点击另一个选项卡/子选项卡,'activeContent'类将从先前的选项卡/子选项卡中删除并放在当前选项卡上。虽然这种情况下工作正常,当我不断点击多个标签/子标签。但在IE8中它非常慢。特别是当我点击后退按钮时,前一个子选项卡中的内容被加载,但活动的子选项卡需要很长时间才能更改其类。它的效果是,尽管当活动子标签仍然是先行标签的时候,其他标签的内容。jquery DOM操作在IE8中很慢,特别是addClass和removeClass

我甚至想先更改选项卡/子选项卡类,像

$(currentTab.node).removeClass('activeContent'); 
$(tab.node).addClass('activeContent'); 

,然后使用seTimeout,东西上面的代码被执行后,等等。

setTimeout(fuunction(){ 

//load ajax content 
}, 800); 

即使这样tab /子选项卡也需要很多时间才能更改其类。

这是一个IE8或我可能需要优化我的代码。我不确定。在所有其他浏览器(包括IE6)中一切正常。它与IE8中的后退按钮有关吗?

+0

你更好地优化代码,因为没有办法,添加/通过jQuery删除类是在IE8缓慢。 – 2010-11-19 19:38:33

+0

示例页面或网址请。 – galambalazs 2010-11-19 21:00:26

回答

1

当你点击后退按钮时,你是否调用这段代码?最有可能的后退按钮导致页面刷新,并且您正在等待整个页面重新加载。 IE8可能只是使这种行为更加明显,因为它将页面内容的缓存稍加改变。

+0

是的,当我点击后退按钮时,我正在调用此代码。标签/子标签内容通过Ajax加载。所以当我点击后退按钮时,页面不会刷新,而是根据哈希来改变页面的状态。这很奇怪,因为我使用相同的代码,当我点击标签和子标签时,虽然我看到稍微延迟改变类,但它不是很明显,但当我后/前进,我检查哈希和运行相同代码切换我点击使用的选项卡和子选项卡类,然后根据url加载ajax内容 – kd44 2010-11-19 19:58:04

1

我有替代解决方案给你。这是一个锚标签上的点击事件吗?我注意到,IE需要花费大量的时间来取消具有href属性的锚标签上的默认操作。特别是在IE8中。

这是从我的网站为例功能:

function SwapLinks() { // This allows our pages to degrade gracefully. But hrefs are slow. So, if JS is enabled remove the href! 
$(".playerLink").each(function (index) { 
    var link = $(this).attr("href"); 
    if (link != undefined && link != null && link != "") { 
     $(this).removeAttr("href"); 
     $(this).attr("link", ""); // This little number makes IE6/IE7 happy. 
     $(this).attr("link", link); 

    } 
}); 

,那么你会加上(“.playerLink”)点击事件处理AJAX更新。

+0

*“...它需要过高的时间让IE取消默认动作” - 您能证明它? – galambalazs 2010-11-19 20:59:24

+0

当我在我们的qa服务器上测试同样的东西时,它工作正常。但是在我的本地机器和我们的开发机器上,IE8表现得非常奇怪..我只是困惑于 – kd44 2010-11-19 22:28:19

+0

@galambalazs。是。我可以。但是我不打算将我的代码恢复到慢版本,只是为了这么做。 – 2010-11-22 15:54:06

0

实际上我的代码没有问题。我在朋友机器上测试过,它工作正常。然后我重置IE8和一切开始正常工作。我不确定为什么IE8以这种方式行事。它发生在早些时候,我不得不重置IE8,因为它不能识别我的本地机器上的jboss服务器上运行的应用程序,通过这样做http://my-pc:8080/myapp/mypage.html但我必须做http://167.232.23.12/myapp/mypage.html,然后它会显示evrything。所以当我重置浏览器时,我可以通过 http://my-pc:8080/运行我的应用程序。

+0

什么意思是“重置”IE8?关闭并重新打开它?清除缓存?作为*可接受的答案*如果你描述了你做得更好一点,这将会更有用。 – 2010-11-22 22:51:52

+0

其实我把我的回答拿回来了,因为如果浏览器模式还是存在问题:IE8和文件模式:IE8但IE8文件模式不是IE8浏览器模式。我将张贴URL来显示问题 – kd44 2010-11-22 23:04:12

0

我也有这个问题,事实证明,这是因为我忘记click()事件return false;。 (我想e.preventDefault()也会工作。)

我一直使用像<a href="#">这样的链接作为我的选项卡,因为它并没有真正导航到任何地方,但IE似乎是“试图”浏览并花时间做所以,如此返回false将导致真正的导航。 (这可能是一种最佳做法,让我把它放在“真实”链接回落到这可能也是一个最佳做法)。

这似乎特别是一个问题,当我已经加载了网页的file:// URL在我的开发机器上(而不是将其部署到服务器并通过HTTP以常规方式访问它)。

(感谢杰夫·戴维斯和kd44其答案上面把我正轨)