此时,alert(document.forms[0].usernames.length)返回的是undefined,因为input组件没有length这个属性。 有两个或者两个以上input的id或者name为"usernames"的时候,document.forms[0].usernames返回的是NodeList数组,此时, alert(document.forms[0].usernames.length)会返回数组的长度,上边的例子中,返回值是3 所以,当使用js进行全选的时候,要考虑同名复选框有一个和多个的情况 复制代码 代码如下: function allSelect(){ var form = document.forms[0]; var state = form.allselectbox.checked; var length = form.usernames.length;//当有两个或者两个以上的复选框name为usernames的时候,返回的是数组的长度 //当有一个复选框name为usernames的时候,form.usernames返回的是复选框对象,而不是数组,所以其length属性是undefined if(length){ //在javascript中,只要被判断的条件是0,null,或者undefined,均被认为是false,其他情况均认为是true for(var i=0;i<length;i++){ form.usernames[i].checked=state; } } else{ form.usernames.checked=state; } }
有一个组件id为"usernames"或者多个组件id为"usernames",document.getElementById("usernames")返回的值都是一个表单组件,当有多个组件id为"usernames",返回的是第一个id为"usernames"组件。 有一个组件name为"usernames"或者多个组件name为"usernames",document.getElementsByName()返回的都是HTMLCollection数组。注意与document.getElementsByTagName()的区别,后者是根据标签类别获取数组。 var names = document.getElementsByTagName("usernames"),alert(names[0])这里返回的结果是undefined,我原来把byName与byTagName弄混了,而没有标签是以usernames开始的,<usernames value=""></usernames>这是不存在的。 但是getElementsByTagName返回的依然是数组集合,其不含任何内容,names[0]不存在,所以返回的是undefined,因为超出数组范围的时候,弹出的都是undefined值。 var test = {"0","1","2",};alert(test[3]);返回的是undefined.