2009-11-17 13 views
9

Chcę dołączyć funkcję do elementu jQuery, który jest uruchamiany za każdym razem, gdy element jest dodawany do strony.Funkcja dołączania jQuery do zdarzenia "ładowanie" elementu

Próbowałem następujących, ale to nie działa:

var el = jQuery('<h1>HI HI HI</H1>'); 
el.one('load', function(e) { 
    window.alert('loaded'); 
});  
jQuery('body').append(el); 

Co ja naprawdę chcę robić to, aby zagwarantować, że inna funkcja jQuery, że spodziewa się trochę ID być na stronie don 't fail, więc chcę wywołać tę funkcję za każdym razem, gdy mój element zostanie załadowany na stronę.


celu wyjaśnienia, jestem przekazując el elementu do innej biblioteki (w tym przypadku jest to odtwarzacz filmów, ale może to być coś innego) i chcę wiedzieć, kiedy el elementem jest dodawana na stronie, niezależnie od tego, czy jest to mój kod odtwarzacza filmowego, czy dodaje element, czy jeszcze coś innego.

+1

Dlaczego nie połączyć się z inną funkcję jQuery tuż po tym, jak dołączany element? – joshcomley

+0

Bo to nie ja dołączam żywioł. –

Odpowiedz

1

Nie wiem, czy jest tego typu wydarzenie, co przychodzi mi do głowy to tworzenie zdarzenia "el-load" w oparciu o samouczek this, a następnie rozszerzenie "append", aby wiedzieć, czy element ma to wydarzenie zadzwoń do tego.

1

Użyj LiveQuery (wtyczka jQuery) i dołącz w tym przypadku zdarzenie load do elementu ur dom (h1).

0

Jeśli tag jest tworzony przez ajax, możesz użyć powiązanego węzła, aby zasubskrybować zdarzenie ajaxSuccess.

http://docs.jquery.com/Ajax/ajaxSuccess

$('#somenode').ajaxSuccess(function(){ 
    if ($('h1').length > 0) { ... } 
}); 

jeśli to tylko dodaje do DOM przez lokalnego scenariusza, nie jestem pewien, że to możliwe, aby obserwować to stworzenie, z wyjątkiem przy użyciu timera do sondowania dla niego.

+0

To, czego nie otrzymuję, to co używać w sekcji #somenode. – crosenblum

+0

#somenode jest twoim selektorem, patrz dokumentacja jQuery: http: //api.jquery.com/category/selectors/ –

1

spróbuj zastąpić metodę dołączania, aby dodać własne wydarzenie?

jQuery.extend(jQuery.fn, { 
    _append: jQuery.fn.append, 

    append: function(j) { 
     this._append(j); 
     j.trigger('append'); 
    } 
}); 

var el = jQuery('<h1>HI HI HI</H1>'); 
el.one('append', function(e) { 
    window.alert('loaded'); 
});  
jQuery('body').append(el); 
+0

Element jest dołączany za pomocą kodu zewnętrznego. Zatem przechwytywanie metody 'append' nie jest dla mnie użyteczne. –

+0

Kto jest osobą trzecią, która może zastąpić metodę dołączania w podobny sposób? O ile mi wiadomo, zdarzenie load uruchamia tylko elementy, które faktycznie ładują się w innym pliku, takim jak img, script i iframe. –

0

zależności od przeglądarek, które trzeba wspierać istnieją DOMNodeInserted i DOMNodeInsertedIntoDocument wydarzenia. Nie mogę ręczyć za to, jak dobrze pracują, ale teoretycznie możesz powiązać te zdarzenia, a następnie albo sprawdzić nowy węzeł i możliwe poddrzewo, które zostało wstawione, albo po prostu sprawdzić cały dokument ponownie za pomocą $ (selektora), który wybrałeś wykryj węzeł, na który czekałeś, aby został dodany.

-1

Spróbuj tych:

var el = jQuery('<h1>HI HI HI</H1>');  
jQuery('body').append(el); 
setTimeout(function(){ 
    window.alert('loaded'); 
},1000);//delay execution about 1 second 

lub pewności tego:

var el = jQuery('<h1>HI HI HI</H1>');  
jQuery('body').append(el); 
window.checker = setInterval(function(){ 
    if($('someselector').length>0){ //check if loaded 
     window.alert('loaded');    
     clearInterval(window.checker); 
    }  
},200); 

w zasadzie, to pętla będzie co 200ms aż selektor dostaje wynik i kończy pętlę, gdy wynik jest dostępny

+0

ewww ... setTimeout – BMiner

2

Chcę dołączyć do funkcję jQuery elementu odpala ilekroć element zostanie dodany do strony.

Chcesz livequery plugin, który robi właśnie to. Ostatnia funkcja live jest podobna, z tą różnicą, że nie wywoła Cię po dodaniu elementu. Używamy go cały czas - działa świetnie.

Będziesz korzystać $('h1').livequery(function() {alert('just added');});

Powiązane problemy