您的位置:首页 > Web前端 > JavaScript

【翻译作品】JavaScript DOM学习第五章:表单简介

2010-02-18 14:13 841 查看
在这一章我主要介绍一些用来检测用户输入的代码,利用这些代码,你也可以写一些自己的检测函数。

因为每一个表单的检测项都不同,所以我也不能给你一个万能的代码。你需要用我在这一章介绍的这些元素构建自己的检测函数。我在后面一张还有一个例子,你也可以参考。

在这一章我会首先讨论一下用JavaScript来检测表单的局限性,然后会解释一下提交时间处理程序,然后是表单本身的一些方法和属性。最后就是如何访问表单元素。

这里还有一篇Jeff Howden的介绍表单的使用错误和解决办法。Forms & JavaScript Living Together in Harmony

局限性

首先,你需要了解当用户提交了表单之后JavaScript的检测代码会做什么:

1、JavaScript检测表单时可能会像下面这样。如果代码发现了一个错误,那么提交就会暂停,然后给用户一个警告让他输入正确的数据。

2、如果没有什么错误或者JavaScript是关闭的那么表单内容就发送到服务器端。

3、如果服务器端的脚本发现了错误,就会返回一些错误信息。在这种情形下,用户需要返回表单然后重新填写数据再次提交。

4、如果没有错误发生,那么服务器端完成必要的工作并显示感谢信息。

就像你所看到的,数据在提交过程中会检测两次:一次是JavaScript一次是服务端。服务端检测总是可行的,而且是可靠的。JavaScript的检测只有在用户开启JavaScript功能的时候才有用,那么既然服务端总是可靠有效,并且与用户使用的浏览器无关,那么为什么还需要JavaScript检测呢?

JavaScript检测是服务器端检测的一个有效补充,因为他能在数据发往服务器端的时候先检测一遍。这样用户就不用使用后退按钮回去修改表单内容,那样会很麻烦,而且在寻找填错的内容也是一件相当麻烦的事情。所以JavaScript检测比服务器端检测对用户的使用体验帮助更大。

所以JavaScript不是一个完全的检测机制,但是作为服务器端的补充和对用户的友好性来讲还是一个不错选择。所以我建议使用这两种检测机制,既满足了用户的使用体验要求又保证了程序的安全性。

onsubmit

当你使用JavaScript来检测表单的时候,第一个事情就是创建onsubmit的事件处理程序。这个程序会在用户提交表单的时候运行。这个程序会检测某些字段是否有值填写,那些复选框是否选择了至少一个,或者其他的你需要检测内容。

代码如下:


checkscript()就是这个程序的名字。这段代码需要返回true或者false。如果返回的是false,那么表单就不会被提交,不论返回true还是false代码都会停止运行。

所以生成的代码如下:

document.forms[0].submit()


[/code]
注意当用户使用JavaScript提交表单的时候,表单的事件处理程序就不起作用了。

重置表单,你可以:

.reset()


[/code]
我假设,没有做测试,你如果使用这个方法,那么重置表单的事件处理程序也就不会执行。

最后你可以修改表单的ACTION项:

document.forms[0].action = 'the_other_script.pl']document.forms[number].elements[number]


[/code]
当页面加载之后,JavaScript就会生成一个forms数组用来存储页面上所有的表单。所以第一个表单就是forms[0],第二个就是forms[1]等等。

JavaScript把表单里面的每个元素也存储进了一个数组。第一个元素就是elements[0],第二个就是elements[1]。所有的input,select,textarea都是一个元素。

有些时候,最好还是使用表单和元素的name比较好。在HTML中,你需要给每个元素命名,比如:


现在你就可以通过下面的方法来访问元素:


使用name的好处就在于你能把页面的所有元素顺序打乱的时候代码依然能够运行,如果用数组就不行。比如上面例子中的city的输入框是document.forms[0].elements[2],但是当你把他放在第一个的时候就变成了document.forms[0].element[0],这时候你就得改代码了。

 ]user_input = document.forms[0].text.value
[/code]

[/code]
其中text就是文本框或者textarea或者隐藏字段的name。value属性就会给出这些元素的文本,然后存储在user_input里。

直接写也可以:

.text.value = 'The new value']user_input = document.forms[0].select.value;


[/code]
要更改他的选择项目,就必须修改selectedIndex,比如:

.select.selectedIndex = 2]var selectBox = document.forms[0].select;
user_input = selectBox.options[selectBox.selectedIndex].value


[/code]
首先找出用户选择了的项目。
document.forms[0].select.selectedIndex给出了选择项目的编号。JavaScript已经创建了一个包含所有select boxes选项的options数组。所以通过这个数组就能知道用户选择了什么,然后存储在user_input里面。


checkboxes

checkboxes有一些小小的不同。我们已经知道了他的值,但是需要知道用户是否选择了他。checked属性可以告诉我们。他有true和false两个值。

那么:

.checkbox.checked) {
user_input = document.forms[0].checkbox.name
}


checkbox是复选框的名字。如果复选框被选择了,我们就得到名字(你也可以选择得到值)然后传递给user_input。

选择一个复选框可以:

document.forms[0].checkbox.checked = true


[/code]
 ]for (i=0;i<document.forms[0].radios.length;i++) {
if (document.forms[0].radios[i].checked) {
user_input = document.forms[0].radios[i].value;
}
}
[/code]

radios就是这一组单选框的名字。

注意document.forms[0].radios是包含所有单选框的数组,循环检测是否checked的属性为true。如果是则传递个user_input。

document.forms[0].radios.length返回所有单选框的数目。

如果选择一个单选框,我们可以设置它的checked的值为true:

document.forms[0].radios[i].checked = true;


[/code]

翻译地址:http://www.quirksmode.org/js/forms.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: