2009-11-10 11 views
11

Tak więc mam następujący kod, który wykonuje setInterval, aż iframe jest dostępna do zapisu.lepszy sposób tworzenia dynamicznych elementów iframe w jQuery?

$('#testdiv').append($('<iframe id="testiframe"/>')); 
var t = setInterval(function(){ 
    if(document.getElementById('testiframe') !== 'undefined'){ 
     clearInterval(t); 
     $('#testiframe').contents().find('body').append('asd'); 
    } 
}, 15); 

Zasadniczo jQuery tworzy element iframe i ładuje go do DOM. Jednak element iframe nie jest dostępny od razu, więc dodatkowe wywołania jQuery, które są zakodowane tak, by miały miejsce tuż po nim. Za pomocą tego kawałka kodu wykonuje on proste sprawdzanie interwałowe, aż nowa pozycja iframe jest dostępna, a następnie zapisuje "asd" do jej zawartości.

Spędziłem około godziny próbując różnych metod łączenia metod tworzenia elementów iframe, ale nic tak naprawdę nie działa. Wszystko wydaje się kwestią czasu. Próbowałem $ ('# testiframe'). Live ('load', function() {}); i to w ogóle nie działa.

Czy ktoś ma czystsze zalecenie w tej sprawie?

+0

pokrewne: http://stackoverflow.com/questions/205087/jquery-ready-in-a-dynamically-inserted-iframe – artlung

Odpowiedz

26

Może zwykłe wydarzenie bez numeru live?

$('<iframe id="testiframe"/>').load(function(){ 
    $('#testiframe').contents().find('body').append('asd'); 
}).appendTo("#testdiv"); 
+0

To jest doskonała. Nie przyszło mi do głowy, aby przypisać zdarzenie * przed * dołączeniem go do elementu #testdiv. Patrząc z perspektywy czasu, powinienem był o tym pomyśleć, ponieważ osobiście potwierdziłem, że można powiązać zdarzenie ładowania z ramką iframe bez dołączenia, czyli: $ ('