jQuery事件正在给我当头一棒

w9apscun  于 2022-12-26  发布在  jQuery
关注(0)|答案(2)|浏览(124)

我花了四个小时试图弄明白为什么我的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在每个图像上启动了 * 三 * 次。我的第一个猜测是冒泡,所以我做了一些探索,并尝试了.stopPropagation() jQuery函数。不幸的是,这对我没有任何帮助。
如果有人能向我解释为什么会发生这种情况,我将不胜感激。

kgqe7b3p

kgqe7b3p1#

mainadslot下面是否有多个元素可被视为第一个子元素?

find()表达式将获取#mainadslot的所有第一个子代,因此,如果标记如下所示(这只是一个疯狂的例子):

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

你会有3个第一个孩子:div、span和img。

elcex8rz

elcex8rz2#

是否尝试过在"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,它才会起作用。
也许这不会解决你的问题,但无论如何你都应该改变它。

相关问题