2011-10-07 34 views
0

我对IE7和jQuery Load的回调有问题。 所有浏览器免除IE7正确启动我的加载函数的回调。只是无法找出解决方案。jQuery在IE7中加载回调

$('#cd_vk_cinemascreen').load('/index.php?id=19 #cd_content', function() { 
$('#cd_vk_cinemascreen #cd_content').attr('class', 'cm_contentWrapper'); 
$('#cd_vk_cinemascreen #cd_content').attr('id', 'nothing'); 
}); 

感谢您的帮助。

+0

任何错误信息?你的问题有点含糊。 – Alex

+1

您正在为两个连续语句中的完全相同的DOM元素执行选择器查询。你怎么可能看不到这是多余的? –

+0

不幸的是,没有错误消息... :( 什么问题在两个连续的语句中选择相同的元素? –

回答

0

我最近有这个问题;我相信(但我不确定)它是一种竞争条件。

当使用带有文档片段的jQuery .load(在您的案例中为'/index.php?id=19 #cd_content')时,整个文档通过AJAX获取。看来在这一点上,回调启动在同一时间解析AJAX加载的文档,所需的选择器块被提取和解析出来,并将ID添加到您自己的文档。

但是,在解析出块并将其添加到文档中时,回调已经开始运行。当然,这个回调没有做任何事情,因为在运行时它所选择的元素还没有被插入。

我的解决方案是为了避免这个问题:我修剪了AJAX加载的文档,以便我不需要加载一个片段,从而避免竞争条件。

+0

不幸的是我无法修剪装载了Ajax的文档,我想我会尝试使用$加载内容。 ajax() –

0

这是我会怎么做:

$(cinemascr).load('/index.php?id=19 #cd_content', function() { 
    $('#cd_content', cinemascr). 
     addClass('cm_contentWrapper'). 
     [0].id = 'nothing'; 
}); 

其中cinemascr预先缓存 - 我想这是页面上的静态元素。在这种情况下,你可以缓存它在页面加载像这样:

var cinemascr = $('#cd_vk_cinemascreen')[0]; 

这可能是因为IE7不喜欢URL '/index.php?id=19'的格式...

+0

试过看起来像“/ page1/page2”的realURL。没有解决问题。我尝试使用$ .ajax()加载内容。 –