jQuery .attr()导致Internet Explorer崩溃

3
这是我第一次在这里发布问题,因为通常我会尝试自己解决。然而,这个问题涉及IE,让我非常疯狂。
我在一个网站上使用jQuery cycle插件,并使用一个小函数来填充标题 div,在图像加载后调用该函数,该函数使用图像的"alt"属性。这似乎激怒了Internet Explorer,它没有时间完成这个显然如此复杂的任务,随着幻灯片的循环,它进入无限循环并最终崩溃 - 版本越新,崩溃越严重:旧版IE只显示错误消息,指出“无法显示网页”,而较新的版本(7和8)完全崩溃系统。
我不知道如何解决或规避这个问题。以下是有问题的代码。
function changeCaption() {
    var caption = $("img", this).attr("alt");
    $('#caption').fadeIn("slow").html(caption);
}

非常感谢您提供的任何指示:我很惊讶,一个如此简单和全球公认的东西(没有遇到任何其他浏览器有问题),竟然会引起如此大的问题。我还在某个地方读到,远程崩溃浏览器是一个严重的问题 :)


尝试使用$('#imgId').attr('alt')。 - Teja Kantamneni
这个方法是从哪里被调用的?看起来它被以一种导致淡入淡出动画堆叠/溢出IE的方式调用了。 - Nick Craver
@Teja:我无法检查特定图像的“alt”属性,因为该图像位于幻灯片上,所以我需要更改它。@Nick:您熟悉jQuery Cycle插件吗?该函数是从幻灯片的“after:”选项中调用的。基本上它是一个回调函数。 - Sunyatasattva
3个回答

1
<div id="slideShow_container">
    <!-- Place your slideshow stuff here -->
    <img id="myImage" alt="crap"  .../>
</div>

然后使用以下内容选择图像:

var s = $("#slideShow_container");

var caption = $("img", s).eq(0).attr("alt");  //selects first matched image

或者

var captions = [];
$("img", s).each(function(){
   captions.push($(this).attr("alt")); //array of captions
})

或者

var caption = $("#myImg", s),attr("alt");  //has to work for an explicit id

0
我怀疑 $("img", this) 函数出现了问题。'img' 选择器没有问题。但是 'this' 上下文可能没有定义好。上下文的目的是缩小搜索空间,以提供更好的 jQuery 性能。上下文参数必须是 DOM 元素、文档或 jQuery 元素。我建议使用以下代码:
<div id="slideShow">

    <!-- put your slide show here -->

</div>

然后使用以下内容来选择图像:

var slideShow = $("#slideShow");
var caption = $("img", slideShow);

如果这不起作用,尝试在代码中添加一些警报(或使用Firebug控制台)。例如,在标题语句之后放置一个alert(caption)。这将帮助您确定出现故障的位置。

-1

我不熟悉循环插件,但似乎你可以尝试这个方法

function changeCaption() {
    $('#caption').fadeIn("slow").html(this.getElementsByTagName('img')[0].alt);
}

假定只有一个图像包含在这里,它应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接