<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function loadA() {
var f = this.A;
f.location = "v1.html";
test();
}
function test() {
if(this.A.document.readyState != "complete") {
window.setTimeout("test()",10);
} else {
alert(this.A.document.getElementById("v1").value);
window.clearTimeout();
}

}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM METHOD=POST ACTION="">
<IFRAME ID="A" NAME="A"></IFRAME>
<INPUT TYPE="checkbox" onClick="loadA()">
</FORM>
</BODY>
</HTML>

解决方案 »

  1.   

    2.htm中这样写就可以了<iframe src="1.htm" id="ifr" name="ifr"></iframe>
    <input onclick="alert(document.frames['ifr'].document.all.f1.v1.value)" type="button" value="get">
      

  2.   

    <script language=javascript>
    var f;
    function fff()
    {
        f = this.a;
        f.location="1.htm";
    }
    </script>
    <script for=a event=onload>
        alert(f.document.getElementById('f1')); 
    </script>
    <body onload=fff()>
    <iframe id=a name=a></iframe>
    </body>
      

  3.   

    <script language=javascript>
    function f()
    {
        //var f = this.a; //this指的是f()本身
        var f = window.framse['a'];
        f.location="1.htm";
        alert(f.document.getElementById('f1'));  //这里总是拿到null
    }
    </script><body onload=f()>
    <iframe id=a name=a></iframe>
    </body>
    这样应该可以了
      

  4.   

    按 litestar(天行健,君子以自强不息) 兄的做法成功
    可是还有点不明白的是
    this.A.document.getElementById("v1").value
    这里直接拿v1的值竟然可以拿到,而我如果换成f1,则还是拿到null,觉得有点怪不过总算能行了,多谢大家ps:
    to flyskytoday(光风.每天进步一点):
    我忘了说,我不要用button按了才拿到东西的,是在2.htm一load我就要它自己拿到1.htm里面的东西to zhuqm(东子):
    按你的方法还是不行 :(
      

  5.   

    对不起,litestar(天行健,君子以自强不息)
    发完了回复又发现不行了,还不让我删掉我自己的回复,晕是这样,那个test()确实可以一直等到document.readyState == "complete"为止,可是
    function loadA() {
        var f = this.A;
        f.location = "v1.html";
        test();
        // 我的本意是想在这里就用v1的值了,也就是在给f.location赋值之后马上用
        // 可是如果我在这里写
        // alert(this.A.document.getElementById("v1").value);
        // 这句话还是会object error...
        // 我的感觉是 test() 并没有使脚本的执行中断IE还在继续下面的语句
        // 晕啊,受不了IE了
    }对了,我还是不能要通过 onclick 这样来获取值,我需要的就是 2.htm 一打开就有 1.htm 里面变量的值了或者,我这种想法根本无法实现?
      

  6.   

    唉,想到一个很土的办法,把我的逻辑放在test里面
    function test() {
    if(this.A.document.readyState != "complete") {
    window.setTimeout("test()",10);
    } else {
    window.clearTimeout();
    //也就是放在这里...不过感觉有点怪,不在同一个function做完我想做的事
    }
    }
      

  7.   

    to hhjjhjhj(大头)(想变胡萝卜^^)
    晕怎么把你的漏了,真是不错啊,测试成功,不过不大明白 //blush
      

  8.   

    <script for=a event=onload>监察id为a的对象的onload事件。
    onload正好在download complete时发生.
      

  9.   

    再补充一点,终于找到一个真正的sleep方法了,这样,我就不需要在其他的script地方处理document.readyState == "complete"的情况,也不怕IE的多线程处理了在
    f.location = "1.htm";
    的后面加上:
    while (1)
    {
        if (f.document.readyState == "complete")
            break;
        else
            pause(10);
    }关键是这个pause,不能用setTimeout,因为setTimeout并不会暂停IE继续处理脚本,找了半天终于找到个仿真的程序:
    /*
    * This function will not return until (at least)
    * the specified number of milliseconds have passed.
    * It uses a modal dialog.
    */
    function pause(numberMillis) {
        var dialogScript = 
            'window.setTimeout(' +
            ' function () { window.close(); }, ' + numberMillis + ');';
        var result = 
            window.showModalDialog(
            'javascript:document.writeln(' +
            '"<script>' + dialogScript + '<' + '/script>")');
    }虽然它是说通过showModalDialog来暂停IE的执行,可是我测试发现没有任何dialog显示出来,真好满足我的需要。