2014-09-09 2 views
0

Je travaille sur une page simple qui contient 2 iframes. Le texte est entré dans iframeA et une fois qu'un bouton est cliqué sur iframeB je veux qu'il affiche le texte de iframeA mais il affiche juste undefined. J'ai l'impression d'être proche mais je n'arrive pas à voir ce que je fais de mal. Le code pour les deux pages iframe est ci-dessous.Les résultats sont retournés comme non définis

--iframeA (ifr1.htm) 
<html> 
<head> 
    <script type="text/javascript"> 
    var var_name = document.getElementById("textbox").value; 
    </script> 
<body> 
<input type="text" name"textbox" id="textbox"/> 
</body> 
</html> 


--iframeB (ifr2.htm) 
<html> 
<body> 
    <script type="text/javascript"> 
    function f2(txt){ 
    var name2 = parent.ifr1.var_name; 
    document.getElementById('div2').innerHTML = name2; 
    } 
    </script> 
    <div id="div2"></div> 
    <button onclick="f2('complete')"></button> 
</body> 
</html> 
+0

pourrait être une condition de concurrence. Au moment où le code frameB s'exécute, le chargement de l'image A peut ne pas être terminé, donc 'var_name' n'est pas encore défini. –

Répondre

0
parent.ifr1.var_name; 

Je recommande parent.frames.ifr1.var_name

il ne fait qu'afficher non définie:

var var_name = document.getElementById("textbox").value;</script> 
</script> 
… 
<input type="text" name"textbox" id="textbox"/> 

Nous assignons la valeur de l'entrée une seule fois, quand le docume nt est en train de charger (je doute que ce soit effectivement works at all). Lorsque vous tapez quelque chose plus tard, la valeur de var_name ne change jamais.

Au lieu de cela, vous voulez obtenir la valeur lorsque le bouton est cliqué:

function f2(txt){ 
    var name2 = parent.frames.ifr1.document.getElementById("textbox").value; 
    document.getElementById('div2').innerHTML = name2; 
} 

(et vous pouvez supprimer le script de ifr1.htm). Vous pouvez également l'utiliser pour la première iframe:

<html> 
<head> 
<body> 
    <input type="text" name"textbox" id="textbox"/> 
    <script type="text/javascript"> 
    var var_name; 
    document.getElementById("textbox").onchange = function(e) { 
     var_name = this.value; 
    }; 
    </script> 
</body> 
</html> 
+0

Cela a fonctionné! Que faire si je voulais que le cadre affiche une entrée d'une zone de texte sur la page principale, et élimine iframeA, est-ce difficile à faire? – user3385236

+0

Non. Vous devez simplement accéder à 'parent' au lieu de' parent.frames.ifrm1'; et ce que j'ai dit à propos de l'entrée est maintenant également valable pour la fenêtre parente. – Bergi

Questions connexes