0

過去 4 時間かけて、1 回しか発生しないことが原因で 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>

div、span、img の 3 つの最初の子が作成されます。

于 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 に答える