页面:源码太多,删减后部分:
   <table cellspacing="0" class="datatable">
          <tr class="coltitle">
            <td style="height: 23px">选择</td>
          </tr>
            <%  int i = 0;
                IEnumerator ie = listTabInvoice.GetEnumerator();
                string strinovic = "";   
                while (ie.MoveNext())
                {
                    Cas.Entity.NHibernate.TabInvoice obj = (Cas.Entity.NHibernate.TabInvoice)(ie.Current);
                    strinovic += obj.Invoiceid + ",";
                    //hidinovices.Value += obj.Invoiceid + ",";
             %>
          <tr>
            <td style="height: 27px">
                <input type="checkbox" value="<%=obj.Invoiceid%>" id="chkchild" name="groupchk" />
            </td>
          </tr>
          <%
              i++;
          }
          hidinovices.Value = strinovic.TrimEnd(',');
          %>
        </table>    <input type="button" name="Button1"  class="button"  value="合并Invoice"  onclick="AA();" style="width: 158px"/>
JS:function AA(){ 
  var invoices="";
FALSE:  var length1 = document.form1.groupchk.length;。
        alert(length1);//当数据为一条时不能取到值,弹出undefined  TRUE:   var length2=document.getElementsByName("groupchk").length;
        alert(length2);//弹出 1   
} 问:
①document.form1.groupchk.length和document.getElementsByName("groupchk").length这两种写法的区别?
②当数据为多条时,它们弹出的条数是一样的,当数据为1条时,document.form1.groupchk.length为未定义,为什么?

解决方案 »

  1.   

    当数据多条时document.form1.groupchk和document.getElementsByName("groupchk") 返回的都是一个控件数组,所以都存在length属性,当数据只有一条的时候,document.form1.groupchk返回的是不是数组所以不存在length属性。
      

  2.   

    问:
    ①document.form1.groupchk.length和document.getElementsByName("groupchk").length这两种写法的区别?
    document.form1.groupchk.length
    是通过form表单元素找到下面的item文本域元素,如果名称一样的就是array,才有length
    如果名称都不同只有一个就不是array,就是单独一个元素。所以length就没有定义了
    ②当数据为多条时,它们弹出的条数是一样的,当数据为1条时,document.form1.groupchk.length为未定义,为什么?
    document.form1.groupchk一条的时候也就是name都不相同,这个时候应该默认是一个html element
     不是一组ele,一组是name有相同的,才是array。所以才未定义