4

ページに画像を動的に追加していますが、live() で動的に動作する「load」イベントを取得できないようです。

これは私が現在持っているコードです:

$('#largeImg' + nextUniqueItemID).hide();
$('#largeImg' + nextUniqueItemID).live('load' , function() {
    $('#loader' + nextUniqueItemID).hide();
    $('#largeImg' + nextUniqueItemID).show();
});

'#largeImg' + nextUniqueItemID関数の前にページに追加された画像であり、'#largeImg' + nextUniqueItemID読み込み中の画像です。

「ライブ」は実際にはリスナーを必要とせず、イベントをすぐにトリガーする必要があるため、誤用されているように感じます。

ご助力いただきありがとうございます。「バインド」を試みましたが、トリガーされませんでした。私も負荷をなくそうとしましたが、うまくいきませんでした。画像の読み込みがいつ完了したかを示すイベントにリスナーをアタッチする方法はありますか?

4

5 に答える 5

6

問題を乗り越えるために本当に特別なことをしていない限り、jQueryのドキュメントはこれについて少し誤解を招く可能性があると思います。

画像などの要素の読み込みイベントはバブルアップしません。1、2 _ _

それらはバブルアップしdocumentないため、ロード イベントが発生したかどうかはわかりません。

documentは load イベントを認識しないため、 live はドキュメントにバブリングするイベントに依存しているため、役に立たなくなります。ライブは、イベント ターゲットをファイルに既にあるセレクターと照合し、何かが一致する場合は、その要素に対してイベント ハンドラーがトリガーされます。

たとえば、次のライブ イベントを登録するとします。

$("#container > input").live("change", function() {
    alert("changed");
});

次に、jQuery は、ドキュメント オブジェクトに変更イベント リスナーがまだ存在しない場合に追加します (同様に)。

$(document).bind("change", function() {
    ..
});

変更イベントがドキュメントにバブルアップすると、登録されている各セレクターを通過し、特定のセレクターの結果のノードにイベント ターゲット (イベントの発生元の要素) が含まれているかどうかを確認します。存在する場合、対応する「ライブ」イベント ハンドラーがそのイベント ターゲットに対して起動されます。

ドキュメントが最初からイベントについて認識していない場合、これは不可能です。

私が間違っていて、jQuery にこれを行うための秘密のソースがない限り、ライブで行うのではなく、load イベントを直接バインドする必要があります。

$("selector").bind("load", function() { .. });
于 2010-06-15T09:53:03.243 に答える
1

このコードはどこにありますか?

$('#largeImg' + nextUniqueItemID).hide();
$('#largeImg' + nextUniqueItemID).live('load' , function() {
$('#loader' + nextUniqueItemID).hide();
$('#largeImg' + nextUniqueItemID).show();
});

それがjQueryajaxのコールバック内にある場合は、を使用する必要はありません。を使用して.live()ください.bind()

于 2010-06-15T08:49:07.390 に答える
0

直接 ID の代わりに属性セレクターを使用しようとしましたか?

$('#largeImg' + nextUniqueItemID).hide();
$('[id=largeImg' + nextUniqueItemID + ']').live('load', function() {
    $('#loader' + nextUniqueItemID).hide();
    $('[id=largeImg' + nextUniqueItemID + ']').show();
});
于 2010-06-15T20:09:02.360 に答える
0

私はドキュメントを見ます: http://api.jquery.com/live/

* In jQuery 1.3.x only the following JavaScript events (in addition to custom events) could be bound with .live(): click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, and mouseup.

    * As of jQuery 1.4 the .live() method supports custom events as well as all JavaScript events. As of jQuery 1.4.1 even focus and blur work with live (mapping to the more appropriate, bubbling, events focusin and focusout).
    * As of jQuery 1.4.1 the hover event can be specified (mapping to "mouseenter mouseleave").

load作成をトリガーするものは何でも、イベントで使用しているアイテムの非表示と表示もトリガーする必要があります。

于 2010-06-15T08:37:25.977 に答える
-1

私がやったのは、負荷イベントを画像の onLoad="" イベントに直接入れることでした。それはうまくいきました。

于 2010-06-15T20:04:49.080 に答える