拒绝访问可能是两个文件的域名不一样tmptr.children[0].innerHTML 先获得 tmptr.children.length
然后用循环处理啊..

解决方案 »

  1.   

    script不允许跨域使用DOM.
    IE安全模型的限制,没办法的,你只能保证在同一个domain下的访问.
      

  2.   

    另外,不要使用基于数字索引的方式引用子对象,那样布局就会受约束.
    尽量使用name或id来引用子对象.
      

  3.   

    另外,不要使用基于数字索引的方式引用子对象,那样布局就会受约束.
    尽量使用name或id来引用子对象.
      

  4.   

    问题1:<tr style="display:none" id=tr1><td></td><td></td><td></td><td></td><td></td></tr>我只定义了五个单元格,你怎么就用到了第11个去了?多加几个td就对头了
    <tr style="display:none" id=tr1><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>问题2:
    我不懂php的,不过你有可能写错了function lw(index) {
    window.opener.document.form1.yha<?echo $bbb;?>.value=bbb.yha[index].value
    ......
    }yha后面的数字怎么没了?
      

  5.   

    哦,问题2没看清,是有的。呵呵,看不惯php。
      

  6.   

    window.open(\"newyh.php?\" + this.value+\"?\"+tbody1.children.length,\"report\"); 应该没有跨域的问题啊。可能你还是什么地方写错了,试试这样调:function lw(index) {
    alert(window.opener);
    alert(window.opener.document);
    alert(window.opener.document.form1);
    alert(window.opener.document.form1.yha<?echo $bbb;?>);
    alert(window.opener.document.form1.yha<?echo $bbb;?>.value);
    alert(bbb)
    alert(index)
    alert(bbb.yha[index])
    alert(bbb.yha[index].value)window.opener.document.form1.yha<?echo $bbb;?>.value=bbb.yha[index].value
    ......
    window.opener.document.form1.yhe<?echo $bbb;?>.value=bbb.yha[index].value}如果在某一行上报了undefined或者干脆报不出来停在那里了就从那一行调起。
      

  7.   

    emu(ston):
    正如您说的那样:
    alert(window.opener);
    alert(window.opener.document);
    alert(window.opener.document.form1);
    前三个检查的回复都是:[object]
    到了:alert(window.opener.document.form1.yha<?echo $bbb;?>);
    这里就是报的:undefined,再后边的就没有回复了。然后IE报:
    错误:window.opener.document.form1.yha1.value为空或不是对象问题出在哪里呢?难道用innerHTML的<input>的名称是不能使用的吗?
      

  8.   

    哈哈那先看看: 
    alert("yha<?echo $bbb;?>");
    也许是php里面写错了什么呢?
      

  9.   

    emu(ston):
    问题!问题!问题!
    (1)
    超过了:tmptr.children[9].innerHTML 增加tmptr.children[10].innerHTML   IE就报错了!您不信就试试下边这段代码吧!另外我找到了为什么不能window.opener.document.form1.yaha1.value报错的原因了,那就是:用innerHTML显示出来的<input>名称是从0开始的!我在后边用:
    <?echo $bbb-1;?>就能够显示到调用者页面中去了!(2)
    tmptr.children[1].innerHTML = "<input size=6 name=yhb"+t+" onkeydown='if (event.keyCode==13) {window.open(\"http://192.168.0.17/newyh.php?\" + this.value+\"?\"+tbody1.children.length,\"report\"); resizeInput()}' onchange='resizeInput()'>"
    在上边这句中,用t的值去代替tbody1.children.length,是不是可以在后边回写的时候不用<? echo $bbb-1;?>的动作了???
    (3)
    如果要动态删除光标所在的行又该怎么办呢?
    <html>
    <head>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function getLength(str)
    {
    var result = 0;
    for (var i=0;i<str.length;i++)
    result += (str.charCodeAt(i)>255)?1.87:1
    if (result <6) result =6
    return result;
    }
    function resizeInput()
    {
    with (tbody1)
    for (var i=0;i<tr1.children.length;i++)
    {
    var k=6;
    for (var j=0;j<children.length;j++)
    with (children[j].children[i].lastChild)
    if  (getLength(value)>k)
    k = getLength(value);
    for (var j=0;j<children.length;j++)
    children[j].children[i].lastChild.size=k;
    }
    event.keyCode=9
    }
    function cloneLine()
    {
    var t = tbody1.children.length;
    var tmptr = tr1.cloneNode(true);
    tmptr.id=null
    tmptr.style.display="";
    tmptr.children[0].innerHTML = "<input size=6 name=yha"+t+" onkeydown='if (event.keyCode==13) resizeInput()' onchange='resizeInput()'>"
    tmptr.children[1].innerHTML = "<input size=6 name=yhb"+t+" onkeydown='if (event.keyCode==13) {window.open(\"http://192.168.0.17/newyh.php?\" + this.value+\"?\"+tbody1.children.length,\"report\"); resizeInput()}' onchange='resizeInput()'>"
    tmptr.children[2].innerHTML = "<input size=6 name=yhc"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
    tmptr.children[3].innerHTML = "<input size=6 name=yhd"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
    tmptr.children[4].innerHTML = "<input size=6 name=yhe"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
            tmptr.children[5].innerHTML = "<input size=6 name=yhf"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
            tmptr.children[6].innerHTML = "<input size=6 name=yhg"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
            tmptr.children[7].innerHTML = "<input size=6 name=yhh"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
            tmptr.children[8].innerHTML = "<input size=6 name=yhi"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
            tmptr.children[9].innerHTML = "<input size=6 name=yhj"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
            tmptr.children[10].innerHTML = "<input size=6 name=yhk"+t+" onkeydown='if (event.keyCode==13) {cloneLine() ;resizeInput()}' onchange='resizeInput()'>"
            tbody1.insertBefore(tmptr)
    event.keyCode=9
    }
    //-->
    </SCRIPT>
    </head>
    <body onload=cloneLine()>
    <form name=form1>
    <table border="1" cellpadding="0" cellspacing="0">
    <tr id=tr1><td>日期</td><td>名称</td><td>编号</td><td>单位</td><td>性别</td><td>年龄</td><td>婚姻状况</td><td>有无子女</td><td>文化程度</td><td>来至哪里</td><td>在线时间</td></tr>
    <tbody id=tbody1>
    </tbody>
    </table>
    <input type=button onclick="document.form1.submit()" value="提交">
    </form>
    </body>
    </html>
      

  10.   

    首先,我前面回的:
    <tr style="display:none" id=tr1><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    也只定义了10个单元格,你要多的,自己再往里面加<td></td>啊。主意,javascript数组是从0开始的,所以
    tmptr.children[10]引用的是第11个。
      

  11.   

    首先,我前面回的:
    <tr style="display:none" id=tr1><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    也只定义了10个单元格,你要多的,自己再往里面加<td></td>啊。主意,javascript数组是从0开始的,所以
    tmptr.children[10]引用的是第11个。
      

  12.   

    您看这段:我加了的呀!!!
    <tr id=tr1><td>日期1</td><td>名称2</td><td>编号3</td><td>单位4</td><td>性别5</td><td>年龄6</td><td>婚姻状况7</td><td>有无子女8</td><td>文化程度9</td><td>来至哪里10</td><td>在线时间11</td></tr>
      

  13.   

    (2)看不明白,你的回写程序你自己才了解啊。要不具体试试就知道了嘛,我怎么知道?
    (3)来个简单的:
    <TABLE>
    <TR>
    <TD><input onclick="parentNode.parentNode.parentNode.removeChild(parentNode.parentNode)"></TD>
    </TR>
    <TR>
    <TD><input onclick="parentNode.parentNode.parentNode.removeChild(parentNode.parentNode)"></TD>
    </TR>
    <TR>
    <TD><input onclick="parentNode.parentNode.parentNode.removeChild(parentNode.parentNode)"></TD>
    </TR>
    </TABLE>
      

  14.   

    要不你加一点调试信息试试:
            tmptr.children[9].innerHTML = "<input size=6 name=yhj"+t+" onkeydown='if (event.keyCode==13)  resizeInput()' onchange='resizeInput()'>"
    alert(tmptr.children.length);
    alert(tmptr.children[10].outerHTML);
            tmptr.children[10].innerHTML = "<input size=6 name=yhk"+t+" onkeydown='if (event.keyCode==13) {cloneLine() ;resizeInput()}' onchange='resizeInput()'>"顺便说一下,在你的代码里面,tmptr.style.display="";可以不要了。
      

  15.   

    这里连续回3次就不能回了。我上http://61.186.239.129/看过了,你的代码和你贴上来的有一点差别:
    你的代码:tmptr.children[0].innerHTML = "<input size="6" name="yha""+t+" onkeydown='if (event.keyCode==13) resizeInput()' onchange='resizeInput()'>"你贴在上面的代码:tmptr.children[0].innerHTML = "<input size=6 name=yha"+t+" onkeydown='if (event.keyCode==13) resizeInput()' onchange='resizeInput()'>"看出来不同了吧?在size哪里多了两个双引号,yha后面又多了一个。
      

  16.   

    是用php生成的吗?写完了记得在浏览器了查看一下源码看看什么地方写错了没。
      

  17.   

    是的,刚才我请你帮我看的那个地址:实际上文件名称是:index.php.
    我改成index.html就没有问题了.可是我需要文件名为.php呀.您有什么办法没有呢?
      

  18.   

    那肯定是你写错了,把代码发到php论坛上请高手看看吧。
      

  19.   

    谢谢您的指点!!
    如果我需要按下ctrl+D键就删除光标所在的行,不论光标在一行中的任何<input>中。又该如何做呢?
    我不是不结贴,是因为大哥您给我的讲解嘛,解铃还需系铃人呀!
      

  20.   

    <html>
    <head>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function removeRow()
    {
    if (event.keyCode == 68 &&  event.ctrlKey )
    with (event.srcElement.parentNode)
    parentNode.parentNode.removeChild(parentNode)
    }
    //-->
    </SCRIPT>
    </head>
    <body><TABLE>
    <TR>
    <TD><input onkeyup="removeRow()"></TD>
    <TD><input onkeyup="removeRow()"></TD>
    </TR>
    <TR>
    <TD><input onkeyup="removeRow()"></TD>
    <TD><input onkeyup="removeRow()"></TD>
    </TR>
    </TABLE>
    </body>
    </html>
      

  21.   

    emu(ston) 哥:不好意思!两个问题
    1.你教我的那段代码,如果我先依次增加了N行后,删除了任意行,那么<input>中name值 后边的那个数字是不是并没有随删除而减小?
    比如:
    city1        
    city2
    city3
    city4
    city5如要我删除了city3这一行,其它的是不是还是1,2,4,5呢?2.还有就是:您还没教我如何将:
    var t = tbody1.children.length;
    onkeydown='if (event.keyCode==13) {window.open(\"http://192.168.0.17/newyh.php?\" + this.value+\"?\"+tbody1.children.length,\"report\"); resizeInput()}' onchange='resizeInput()'>"
    中+tbody1.children.length用t去换???
      

  22.   

    我能跟你说的只是大方向而已,象上面这样具体的细节你还是要靠自己搞懂啊,不然怎么提高呢?1,是。所以最好不要动态生成name,而是全部用同一个name,按下标访问。2,为什么非要换t呢?
      

  23.   

    emu(ston)哥:
    也不知道您来我的电脑上看过效果没有,因为那表格是用innerHTML动态生成的,所以在生成了比如N行之后,有可能需要删除先前的任意一行,这个时候如果双增加新行,就会有问题
      

  24.   

    的确不明白,我其实目的很简单,就是在您看到的第三个页面出来的时候,定位数据回写到window.opener的那一横行上。
    但javascript对我来说实在是太复杂了,就象您前边给我说的一样,学!都学不过来
      

  25.   

    首先,如果你想要访问触发open事件的元素,就要把原来的页面锁定,也就是说该用modalDialog而不是open一个新窗口,否则你试图写回原来的页面的时候原来的页面可能已经不是原来的状态了,说不定那一行都被删除了呢?如果用了modalDialog,就可以把event的srcElement或者event对象本身当参数传递到modalDialog中,那么定位也就不需要通过名字了。关于modalDialog的资料你可以先查查http://www.csdn.net/Expert/forum.asp?typenum=8&searchKeys=modalDialog&roomid=27&author=&tabletype=now
    或者在我前面给你的链接的课程中找相应的内容。
      

  26.   

    emu(ston) 哥:
    帮我看看怎么回事!
    test.html
    <HTML><BODY>
    <input type="text" id="txt" size=20 onkeydown="if(event.keyCode==13) echo()">
    <input type="text" id="txt1" size=20>
    <script>
    function echo() {
    x = showModalDialog("testnew.html");
    txt.value = x[0];
    txt1.value = x[1];
    }
    </script>
    </BODY></HTML>
    testecho.html
    <HTML><BODY>
    <input type="text" name="dlgtxt">
    <input type="text" name="dlgtxt1">
    <button onclick="doSomething()">do somthing</button>
    <script>
    function doSomething(){
      returnValue = dlgtxt.value;
      returnValue = dlgtxt.value;//调用页第二个框中写回去的同样是dlgtxt的值
      close();
    }
    </script>
    </BODY></HTML>
      

  27.   


    testecho.html<HTML><BODY>
    <input type="text" name="dlgtxt">
    <input type="text" name="dlgtxt1">
    <button onclick="doSomething()">do somthing</button>
    <script>
    function doSomething(){
      returnValue = [dlgtxt.value,dlgtxt1.value]
      close();
    }
    </script>
    </BODY></HTML>
      

  28.   

    emu的回答没错,在test.html中像数组一样读返回值
    <HTML><BODY>
    <input type="text" id="txt" size=20 onkeydown="if(event.keyCode==13) echo()">
    <input type="text" id="txt1" size=20>
    <script>
    function echo() {
    x = showModalDialog("testnew.html");
    txt.value = x[0]; 
    txt1.value = x[1];
    }
    </script>
    </BODY></HTML>
      

  29.   

    emu(ston) 哥:对不起!对不起!小的我给您鞠躬(90度)!!!
      

  30.   

    或者使用自定义对象:
    test.html
    <HTML><BODY>
    <input type="text" id="txt" size=20 onkeydown="if(event.keyCode==13) echo()">
    <input type="text" id="txt1" size=20>
    <script>
    function echo() {
    x = showModalDialog("testnew.html");
    txt.value = x.txt1;
    txt1.value = x.txt2;
    }
    </script>
    </BODY></HTML>testnew.html
    <HTML><BODY>
    <input type="text" name="dlgtxt">
    <input type="text" name="dlgtxt1">
    <button onclick="doSomething()">do somthing</button>
    <script>
    function doSomething(){
      var m_data = new Object;
      m_data.txt1 = dlgtxt.value;
      m_data.txt2 = dlgtxt1.value;
      returnValue = m_data;
      close();
    }
    </script>
    </BODY></HTML>
      

  31.   

    关键是要返回一个对象,把要返回的值包装在这个对象里面,是一个数组还是别的什么对象倒无所谓。另外lhdjk(耗子)的代码大大咧咧的,总是要留下一下基本问题:---------------------------------------
    returnValue = dlgtxt.value;
    returnValue = dlgtxt.value;//调用页第二个框中写回去的同样是dlgtxt的值
    ---------------------------------------
    估计第二个dlgtxt.value是dlgtxt1.value之误吧?------------------------------------------
    x = showModalDialog("testnew.html");
    ...testecho.html
    ------------------------------------------
    估计前面testnew就是后面的testecho吧?
      

  32.   

    onestab(┼─) :咱们怎么又说到一块去了呵呵。
      

  33.   

    window.open()中:我这样传值:
    <input  type="text" name="top" value=""  onkeydown="if(event.keyCode==13){window.open('123.htm?'+this.value);}"> showModalDialog中呢??怎么办??
      

  34.   

    要简单的:
    onkeydown="if(event.keyCode==13){value=showModalDialog('123.htm?'+value);}"
    但是最好是调用函数,在函数里面做。
    onkeydown="if(event.keyCode==13)doSomething()"
    ...
    function doSomething()
    {
    x = showModalDialog("testnew.html");
    event.srcElement.value = x[0];
    event.srcElement.parentNode.parentNode.children[2].firstChild.value = x[1];
    }只是示范一下写法,没有调过。