JavaScript中document.forms[0]与getElementByName区别


Posted in Javascript onJanuary 21, 2015

首先我们来看个示例:

<form name="buyerForm" method="post" action="/mysport/control/user/list.do">

<input type="checkbox" id="usernames" value="testtest" >testtest<br>

<input type="checkbox" name="usernames" value="testtest" >testtest<br>

<input type="text" id="usernames" value="testtest" >testtest<br>

</form>

document.forms[0]在HTML页面中有一个form表单或者多个form表单的时候,都是返回一个NodeList类型的form数组
document.forms[0].usernames,这里的usernames可以是id的值,也可以是name的值,在这里这两个属性是等价的。而且,不会区分组件是文本框,是单选框,还是复选框。

这时要区分两种情况

有一个input的id或者name为'usernames'的时候,document.forms[0].usernames返回的是具体的input组件,这时如果操作的话,就要按照具体的组件操作方法来使用。

此时,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.

Javascript 相关文章推荐
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
Apr 02 Javascript
Javascript中判断变量是数组还是对象(array还是object)
Aug 14 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
javascript实现倒计时(精确到秒)
Jun 26 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
Async Validator 异步验证使用说明
Jul 03 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
详解vue beforeRouteEnter 异步获取数据给实例问题
Aug 09 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
JavaScript中Object、map、weakmap的区别分析
Dec 15 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 #Javascript
JavaScript的内存释放问题详解
Jan 21 #Javascript
script标签属性用type还是language
Jan 21 #Javascript
JS交换变量的方法
Jan 21 #Javascript
setinterval()与clearInterval()JS函数的调用方法
Jan 21 #Javascript
js实现DOM走马灯特效的方法
Jan 21 #Javascript
浅谈javascript 迭代方法
Jan 21 #Javascript
You might like
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
5 cool javascript apps
2007/03/24 Javascript
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python装饰器原理与用法分析
2018/04/30 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
详解Python中is和==的区别
2019/03/21 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
J2EE面试题大全
2016/08/06 面试题
物业管理计划书
2014/01/10 职场文书
先进集体事迹材料
2014/02/17 职场文书
端午节演讲稿
2014/05/23 职场文书
课程设计的心得体会
2014/09/03 职场文书
2015年采购员工作总结
2015/04/27 职场文书
运动员代表致辞
2015/07/29 职场文书
春节随笔
2015/08/15 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
Python实现8种常用抽样方法
2021/06/27 Python
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers