【问题标题】:jQuery Load Callback in IE7IE7 中的 jQuery 加载回调
【发布时间】:2011-10-07 12:42:22
【问题描述】:

IE7 和 jQuery Load 的回调有问题。 除 IE7 之外的所有浏览器都会正确触发我的 Load 函数的回调。就是想不出解决办法。

$('#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');
});

感谢您的帮助。

【问题讨论】:

  • 任何错误信息?你的问题有点含糊。
  • 您正在对两个连续语句中完全相同的 DOM 元素执行选择器查询。你怎么可能看不到这是多余的?
  • 不幸的是没有错误信息... :( 在两个连续的语句中选择相同的元素有什么问题?
  • @user983992 这就像去商店买两包烟,但这样做的方式是去商店,买一包,然后回家,然后再回到商店并购买第二包。这当然是低效的,我相信你明白。
  • Ok thx,那么我如何通过只选择一次元素来设置 id 和 class 属性? .attr().attr() ?

标签: jquery internet-explorer-7 callback load


【解决方案1】:

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

当使用带有文档片段的 jQuery .load(在您的情况下为 '/index.php?id=19 #cd_content')时,使用 AJAX 获取整个文档。似乎在那一点上,在解析 AJAX 加载的文档的同时启动了回调,提取并解析出所需的选择器块,并将 ID 添加到您自己的文档中.

但是当该块被解析并添加到您的文档时,回调已经开始运行。当然,该回调什么也没做,因为在它运行时,它选择的元素还没有被插入。

我的解决方案是避免这个问题:我削减了 AJAX 加载的文档,这样我就不需要加载片段,从而避免了竞争条件。

【讨论】:

  • 不幸的是,我无法修剪 Ajax 加载的文档。我想我会尝试使用 $.ajax() 加载内容
【解决方案2】:

我会这样做:

$( 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不喜欢'/index.php?id=19'的URL格式...

【讨论】:

  • 尝试了看起来像“/page1/page2”的realURL。没有解决问题。我会尝试使用 $.ajax() 加载内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2012-06-03
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多