2009-11-10 6 views
11

Итак, у меня есть следующий код, который выполняет setInterval до тех пор, пока не будет доступен iframe.лучший способ создания динамических фреймов в jQuery?

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

В основном происходит то, что jQuery создает элемент iframe и загружает его в DOM. Тем не менее, iframe недоступен сразу, поэтому дополнительные вызовы jQuery, которые закодированы, происходят сразу послесловие. С помощью этого фрагмента кода он выполняет простую проверку интервалов до тех пор, пока не будет доступен новый iframe, а затем напишет «asd» на его содержимое.

Я потратил около часа, чтобы попробовать различные методы цепных методов для создания iframe, но ничего действительно не работает. Все это кажется вопросом времени. Я попробовал $ ('# testiframe'). Live ('load', function() {}); и это не работает вообще.

У кого-нибудь есть рекомендация по уборке?

+0

Связанный: http://stackoverflow.com/questions/205087/jquery-ready-in-a-dynamically-inserted-iframe – artlung

ответ

26

Может быть, просто обычное мероприятие без live?

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

Это отлично. Мне не пришло в голову назначить событие * перед тем, как прикрепить его к элементу #testdiv. Оглядываясь назад, я должен был подумать об этом, потому что я отдельно подтвердил, что вы можете связать событие загрузки с iframe без привязки, aka: $ ('