2009-11-10 31 views
11

Bu yüzden iframe için yazılana kadar bir setInterval yapan aşağıdaki kod var.daha iyi bir yol?

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

Temelde ne olur jQuery DOM içine iframe öğesi ve yükleri bunu yaratmasıdır. Bununla birlikte, iframe hemen kullanılabilir değil, bu yüzden hemen sonraki jQuery çağrıları, hemen sonradan kodlanacak. Bu kod parçasıyla, yeni iframe kullanılabilir olana kadar basit bir aralık kontrolü yapar, daha sonra 'asd' içeriğini kaydeder.

iframe oluşturma için farklı yöntemler zincirleme yöntemlerini denemekten yaklaşık bir saat harcadım ama hiçbir şey gerçekten işe yaramıyor. Her şey bir zamanlama meselesi gibi görünüyor. $ ('# Testiframe') denedim, canlı ('load', function() {}); ve bu hiç işe yaramıyor.

Bundan başka kimsenin daha temiz bir öneri var mı?

+0

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

cevap

26

Belki sadece live olmadan düzenli bir etkinlik?

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

Bu mükemmel. Olayı #testdiv öğesine eklemeden önce * atamak bana gerçekleşmemişti. Geriye dönüp bakıldığında, bunun hakkında düşünmeliydim, çünkü yük olayını bağlanmadan iframe bağlayabileceğinizi de doğruladım: $ ('