2009-11-10 8 views
11

J'ai donc le code suivant qui fait un setInterval jusqu'à ce que l'iframe soit disponible pour être écrit.meilleure façon de créer des iframes dynamiques dans jQuery?

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

Fondamentalement, ce qui se passe est que jQuery crée l'élément iframe et le charge dans le DOM. Cependant, l'iframe n'est pas disponible immédiatement, donc les appels jQuery supplémentaires qui sont codés arrivent juste après. Avec ce morceau de code, il effectue un simple contrôle d'intervalle jusqu'à ce que le nouveau iframe soit disponible, puis écrit 'asd' dans son contenu.

J'ai passé environ une heure à essayer différentes méthodes de chaînage de méthodes pour la création d'iframe, mais rien ne fonctionne vraiment. Tout semble être une question de timing. J'ai essayé $ ('# témoignage'). Live ('load', function() {}); et ça ne marche pas du tout.

Est-ce que quelqu'un a une recommandation plus propre à ce sujet?

+0

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

Répondre

26

Peut-être juste un événement régulier sans live?

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

C'est excellent. Il ne m'est pas venu à l'esprit d'assigner l'événement avant de l'attacher à l'élément #testdiv. Rétrospectivement, j'aurais dû y réfléchir parce que j'ai confirmé séparément que vous pouviez lier l'événement load à l'iframe sans qu'il soit attaché, aka: $ ('