JavaScript DOM 学习第五章 表单简介_基础知识
因为每一个表单的检测项都不同,所以我也不能给你一个万能的代码。你需要用我在这一章介绍的这些元素构建自己的检测函数。我在后面一张还有一个例子,你也可以参考。
在这一章我会首先讨论一下用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代码都会停止运行。
所以生成的代码如下:
function checkscript() {
if (some value is/is not something) {
// something is wrong
alert('alert user of problem');
return false;
}
else if (another value is/is not something) {
// something else is wrong
alert('alert user of problem');
return false;
}
// If the script makes it to here, everything is OK,
// so you can submit the form
return true;
}
当然这段代码可以写的很复杂,如果你需要检测很多表单项目或者一大堆的单选框。基本思想就是这样了:你遍历表单里的每一个需要检查的元素,如果发现了错误就返回false,然后代码停止运行,表单也不会被提交。
当你发现了错误的时候,你应该提醒用户。可以用一个警告框,不过今天大多数的办法是生成一条错误信息然后添加在错误条目的后面。
只有在最后地方,你检查过了所有的元素并且没有发现错误,那么你就返回true,表单就会被提交。
表单的方法和属性
JavaScript对于处理表单还有一些内建的方法和属性。其中三个比较重要:
你可以用submit()方法来提交表单。提交页面的第一个表单你可以写:
注意当用户使用JavaScript提交表单的时候,表单的事件处理程序就不起作用了。
重置表单,你可以:
[code] document.forms[0].reset()
我假设,没有做测试,你如果使用这个方法,那么重置表单的事件处理程序也就不会执行。
最后你可以修改表单的ACTION项:
[code] document.forms[0].action = 'the_other_script.pl';
如果表单在某些情况需要提交给其他页面的时候这个方法就相当方便。
访问表单元素
表单的有效性检测需要访问到表单的元素才能知道用户填了什么内容进去。所以首先我们需要根据Level 0 DOM来访问表单。一般这样写:
[code] document.forms[number].elements[number]
当页面加载之后,JavaScript就会生成一个forms数组用来存储页面上所有的表单。所以第一个表单就是forms[0],第二个就是forms[1]等等。
JavaScript把表单里面的每个元素也存储进了一个数组。第一个元素就是elements[0],第二个就是elements[1]。所有的input,select,textarea都是一个元素。
有些时候,最好还是使用表单和元素的name比较好。在HTML中,你需要给每个元素命名,比如:
[code]
现在你就可以通过下面的方法来访问元素:
[code] document.personal.name 2 document.personal.address 3 document.personal.city
使用name的好处就在于你能把页面的所有元素顺序打乱的时候代码依然能够运行,如果用数组就不行。比如上面例子中的city的输入框是document.forms[0].elements[2],但是当你把他放在第一个的时候就变成了document.forms[0].element[0],这时候你就得改代码了。
值的检测
当然,最重要的事情还是找出用户填进去的值或者选择了的复选框。有些时候你还想填一些其他信息在表单里。
下面的这些小段的代码能够帮助你访问到表单里的元素。所有的都是把用户输入保存在user_input变量中。之后,你就可以检测有效性了。
Texts,textarea和隐藏的字段
非常简单:
[code] user_input = document.forms[0].text.value
其中text就是文本框或者textarea或者隐藏字段的name。value属性就会给出这些元素的文本,然后存储在user_input里。
直接写也可以:
Select Boxes
这也很简单:
要更改他的选择项目,就必须修改selectedIndex,比如:
现在第三个选项就被选择了。
旧的浏览器
在旧的浏览器里面select boxes没有value属性,那么:
var selectBox = document.forms[0].select;
user_input = selectBox.options[selectBox.selectedIndex].value
首先找出用户选择了的项目。document.forms[0].select.selectedIndex给出了选择项目的编号。JavaScript已经创建了一个包含所有select boxes选项的options数组。所以通过这个数组就能知道用户选择了什么,然后存储在user_input里面。
checkboxes
checkboxes有一些小小的不同。我们已经知道了他的值,但是需要知道用户是否选择了他。checked属性可以告诉我们。他有true和false两个值。
那么:
if (document.forms[0].checkbox.checked) {
user_input = document.forms[0].checkbox.name
}
checkbox是复选框的名字。如果复选框被选择了,我们就得到名字(你也可以选择得到值)然后传递给user_input。
选择一个复选框可以:
单选框
不幸的是,你不能一下子就找到哪个单选框被选中了。只能在遍历之后查找checked属性为true的那一项。
for (i=0;i
user_input = document.forms[0].radios[i].value;
}
}
radios就是这一组单选框的名字。
注意document.forms[0].radios是包含所有单选框的数组,循环检测是否checked的属性为true。如果是则传递个user_input。
document.forms[0].radios.length返回所有单选框的数目。
如果选择一个单选框,我们可以设置它的checked的值为true:
翻译地址:http://www.quirksmode.org/js/forms.html
转载请保留以下信息
作者:北玉(tw:@rehawk)

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
