2014-09-09 3 views
0

2 개의 iframe이 포함 된 간단한 페이지에서 작업하고 있습니다. 텍스트가 iframeA에 입력되고 iframeB에서 버튼을 클릭하면 iframeA에서 텍스트를 표시하지만 정의되지 않은 텍스트 만 표시합니다. 나는 가까이있는 것 같지만 내가 뭘 잘못하고있는 것처럼 보이지 않는 것 같아. 두 iframe 페이지의 코드는 모두 아래에 있습니다.결과가 Undefined로 반환됩니다.

--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

은 경쟁 조건 일 수 있습니다. frameB 코드가 실행될 때, 프레임 A가 로딩을 완료하지 못했을 수 있으므로'var_name '은 아직 정의되지 않았다. –

답변

0
parent.ifr1.var_name; 

난 그냥 정의되지 않은 표시 parent.frames.ifr1.var_name

를 추천 할 것입니다 :

var var_name = document.getElementById("textbox").value;</script> 
</script> 
… 
<input type="text" name"textbox" id="textbox"/> 
한 번만 입력의 값을 할당하고

, 문서 NT가로드 중입니다 (실제로는 works at all 일 수 있습니다). 나중에 아무 것도 입력하지 않으면 var_name 값이 변경되지 않습니다.

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

을 (당신은 ifr1.htm에서 스크립트를 제거 할 수 있습니다) :

대신, 당신은 버튼을 클릭 할 때 값을 얻을 싶어요. 또는 첫 번째 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

이것은 효과가 있습니다! 프레임을 메인 페이지의 텍스트 상자에서 입력을 표시하고 iframeA를 제거하고 싶다면 그렇게하기가 어렵습니까? – user3385236

+0

아니요. 단순히 'parent.frames.ifrm1' 대신'parent'에 액세스하면됩니다. 입력에 대해 내가 말한 것은 이제 부모 창과 똑같이 유지됩니다. – Bergi

관련 문제