0

在过去的四个小时里,我一直在试图弄清楚为什么我的 jQuery 事件会因为只能发生一次的事情而多次触发。基本上,我有一个将使用 jQuery 旋转图像的广告横幅。我正在等待页面加载以加载除默认显示的图像之外的所有图像:

$("#mainadslot").prepend('<img>')
.find(":first-child")
.attr("src", src)
.load(function(event) {
    // Global javascript variable itterates here
    // to count how many images have loaded. 
    // If they're all done, we can start rotating
});

而且我什至还没有达到效果,因为出于某种奇怪的原因,图像上的 onLoad 为每张图像触发了 3次。我的第一个猜测是冒泡,所以我稍微摸索了一下并尝试了 .stopPropagation() jQuery 函数。不幸的是,这对我没有任何帮助。

如果有人能向我解释为什么会发生这种情况,我会非常感激。

4

2 回答 2

1

#mainadslot 是否有多个元素可以被视为其下的第一个子元素?

您的 find() 表达式将获取 #mainadslot 的所有第一个孩子的后代。所以,如果标记看起来像这样(只是一个疯狂的例子):

<div id="mainadslot">
    <div>
        <span>
            <img>
        </span>
    </div>
</div>

您将有 3 个第一个孩子:div、span 和 img。

于 2009-06-10T15:17:46.677 回答
0

您是否尝试在“src”属性之前设置 load() 事件处理程序?

$("#mainadslot").prepend('<img>')
.find(":first-child")
.load(function(event) {
    // Global javascript variable itterates here
    // to count how many images have loaded. 
    // If they're all done, we can start rotating
})
.attr("src", src);

根据文档: load 只有在元素完全加载之前设置它才会起作用。

也许这不能解决你的问题,但无论如何你都应该改变它。

于 2009-06-10T09:31:25.363 回答