2010-06-15 6 views
5

Mam obrazy dynamicznie dodawane do strony, nie wydaje mi się, aby zdarzenie "load" działało dynamicznie z live().Słowo kluczowe Live() nie działa przy ładowaniu z dynamicznymi obrazami html

Jest to kod Obecnie mam:

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

z '#largeImg' + nextUniqueItemID bycia obrazem, który został dodany do strony wcześniej w funkcji i '#largeImg' + nextUniqueItemID bycia loading image.

Czuję się tak, jakbym nadużywał "na żywo", ponieważ tak naprawdę nie potrzebuje słuchacza, ale natychmiast wywołuje zdarzenie.

Dzięki za pomoc. Próbowałem "bindować" i to nigdy się nie uruchamiało. Próbowałem też pozbyć się ładunku, ale to nie zadziałało. Czy istnieje sposób dołączenia detektora do zdarzenia, które wskazywałoby, kiedy ładowanie obrazu zostało wykonane?

Odpowiedz

-1

Co skończyło się robi było wprowadzenie zdarzenia ładowania bezpośrednio na mój obraz jest onLoad = „” zdarzenia. To się udało.

0

Chciałbym spojrzeć w dokumentacji: 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"). 

Cokolwiek wyzwalania tworzenia powinny również wywołać ukryć i pokaz elementów, które korzystają ze zdarzeniem load.

1

gdzie znajduje się ten kod?

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

jeśli to jest wewnątrz wywołania zwrotnego z jQuery AJAX, nie trzeba używać .live() użyć .bind().

6

Myślę, że dokumentacja jQuery może być trochę myląca dla tego, chyba że robi coś naprawdę wyjątkowego, aby ominąć problem.

Wczytaj zdarzenia na elementach takich jak obrazy, które nie są bąbelkowane. 1,2

ponieważ nie bańka górę, document nie wie, czy zdarzenie load został zwolniony.

Ponieważ document nie wie o zdarzeniu ładowania, transmisja na żywo stanie się bezużyteczna, ponieważ transmisja na żywo będzie polegać na wydarzeniach propagujących się do dokumentu, a gdy już to zrobi, dopasuje cel zdarzenia do selektorów, które już posiada w pliku, a jeśli coś pasuje, uruchamiany jest moduł obsługi zdarzenia dla tego elementu.

Na przykład, załóżmy, że były zarejestrować następujące zdarzenie na żywo:

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

następnie jQuery doda słuchacza zmiana zdarzeń na obiekcie dokumentu, jeżeli nie istnieje (podobne do):

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

Gdy dowolne zdarzenie zmiany baniek do dokumentu, przechodzi przez każdy zarejestrowany selektor i sprawdza, czy którykolwiek z wynikowych węzłów dla danego selektora zawiera cel zdarzenia (element, z którego pochodzi wydarzenie). Jeśli jest obecny, to odpowiednia obsługa zdarzenia "na żywo" jest uruchamiana dla tego celu zdarzenia.

Nie jest to możliwe, jeśli dokument nie wiedziałby o zdarzeniu.

O ile się nie mylę, a jQuery ma jakiś sekretny sos do robienia tego, powinieneś bezpośrednio powiązać ładowanie zdarzeń zamiast robić to na żywo.

$("selector").bind("load", function() { .. }); 
0

Czy próbowałeś użyć selektora atrybutów zamiast bezpośredniego identyfikatora?

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