本来想实现一个功能:根据单选radio控件所选的内容出现不同的东西,就写了一段js代码;结果火狐上能调通,可是在IE上调不通,所以在此请各位大哥大姐帮忙解释下原因,错误点,和解决办法
网页错误详细信息用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
时间戳: Mon, 3 Jan 2011 16:33:45 UTC
消息: 意外地调用了方法或属性访问。
行: 27
字符: 5
代码: 0
URI: http://localhost:8080/ClassroomManage/querycourse.jsp源代码如下:[align=left]<html>
  <head>
    <title>课程查询</title>
  </head>
  <link rel="stylesheet" type="text/css" href="css/style.css">
  <script type="text/javascript">
    function check(){
      var byroom = document.getElementById("byroom");
      var byteacher = document.getElementById("byteacher");
if(byroom.checked){
  var s = '';
  s += '<td id="td0" align="left">选择教学楼<select><option value="0">综合楼</option><option value="2">冶金楼</option><option value="4">第四教学楼</option><option value="5">第五教学楼</option></select></td><td id="td1" align="right">选择教室<select><option value="0">0001</option><option value="2">0002</option><option value="4">0003</option><option value="5">0004</option></select></td>';
  var nElement;
  nElement = document.createElement("td");
  nElement.innerHTML=s;
  if(document.getElementById("queryby").childNodes.length != 0){
    document.getElementById("queryby").removeChild(document.getElementById("queryby").childNodes[0]);
  }
  document.getElementById("queryby").appendChild(nElement);
         }else{
     var s = '';
  s += '<td id="td0" align="left">学院<select><option value="0">计控学院</option><option value="2">冶金学院</option><option value="4">机械学院</option><option value="5">信息学院</option></select></td><td id="td1" align="right">选择教室<select><option value="0">5A101</option><option value="2">5A102</option><option value="4">5A103</option><option value="5">5A104</option></select></td>';
  var nElement;
  nElement = document.createElement("td");
  nElement.innerHTML=s;
  if(document.getElementById("queryby").childNodes.length != 0){
  document.getElementById("queryby").removeChild(document.getElementById("queryby").childNodes[0]);
  }
  document.getElementById("queryby").appendChild(nElement);
}
}
  </script>  <body onload="check()">
    <form action="">
      <table style="margin-left: 50px" width=500>
<tr>
  <td colspan=2 align="left">
    <input class="radio" id="byroom" type="radio" name="queryBy"
          value="room" checked onclick="check()">
    按教室查询&nbsp;&nbsp;&nbsp;&nbsp;
    <input class="radio" id="byteacher" type="radio" name="queryBy"
                value="teacher" onclick="check()">
             按教师查询
  </td>
         </tr>
       </table>
    </form>
    <br>
    <div
style="margin-left: 50px; width: 500; height: 300; overflow: auto; BORDER-RIGHT: #9e9e9e 1px solid; BORDER-TOP: #9e9e9e 1px solid; BORDER-LEFT: #9e9e9e 1px solid; BORDER-BOTTOM: #9e9e9e 1px solid;">    </div>
  </body>
</html>

解决方案 »

  1.   

    问题补充:具体好像在“document.getElementById("queryby").appendChild(nElement);”这句,但是找不出问题
      

  2.   

    "queryBy"是radio的name,不能用document.getElementById去取。火狐居然可以吗?没想过它还能这么用。
      

  3.   

    火狐上真能“调通”?试图将一个“td”元素,插入到一个不能含有子元素的input下作为子节点,这会得到什么结果?请楼主先理清一下元素的组织结构,再来写代码。
    另外,通过getElementById取name属性对应的元素,是不符合规范的做法,有兼容性问题。<input type="text" id="input" />
    <script type="text/javascript">
    var td = document.createElement('td');
    var input = document.getElementById('input');
    input.appendChild(td);
    </script>
      

  4.   


    FF估计不行 IE貌似可以
      

  5.   

    是我的原因,代码少粘了一行,我不是得到radio元素。代码应该如下
    <input class="radio" id="byteacher" type="radio" name="queryBy"
    value="teacher" onclick="check()">
      按教师查询
    </td>
      </tr>
      <tr id="queryby"></tr></table>
    </form>我想得到的就是table中的id为"queryby"的这一行,结果可能是因为我的命名跟radio的name"queryBy"冲突IE就报错了。现在我把<tr>的id已经改了,问题也解决了。。还是要谢谢大家!!