# javascript快速入門15--表單
大多數Web頁面與用戶之間的交互都發生在表單中,表單中有許多交互式HTML元素如:文本域,按鈕,復選框,下拉列表等。從文檔對象層次圖中可以看到,表單是包含在文檔中的,所以要訪問表單,仍然需要通過document對象來訪問
## Form對象
表單就是指的form標簽及其里面的內容,要獲取一個表單對象,可以給某個form標簽加個id屬性,然后使用document.getElementById方法獲得。也可以使用document.getElementsByTagName("form")來獲取所有表單的集合,然后通過下標來訪問。還可以給form標簽加個name屬性,然后可以使用document.getElementsByTagName來訪問,注意,同樣要使用下標來訪問
事實上,0級DOM(0級DOM并不是任何DOM規范,事實上它是BOM的內容,但瀏覽器都實現的比較好)為我們提供了更簡單的訪問From對象的方法——使用document.formName
```
<form name="formName"></form> var fm = document.formName;//可以這樣來直接引用該表單對象
//與document.getElementsByTagName("form")相對應有document.forms集合
var fm = document.forms[0];//獲取第一個Form對象
```
### 訪問表單元素
Form對象有個elements屬性,包是一個含了form標簽里面的所有表單控件(input,select等標簽,但不包含如div之類的標簽)的偽數組
```
var fm = document.forms[0];
alert(fm.elements.length);//length屬性報告了元素的個數
```
在之前,訪問input這類標簽和訪問其它標簽沒什么區別,可以使用ID,也可以使用className,但當它們在表單中時,可以使用它們的nam有來訪問
```
<form name="formName">
<input name="textInput" type="text" value="文本框" />
</form> alert(document.formName.textInput.value);
```
### Form對象相關事件及方法
當表單提交時會發生submit事件,我們可以設置事件監聽,當用戶提交表單時檢查表單內容。同時,如果用戶輸入有誤,要阻止表單提交,可以在事件處理函數里return false就行了,當正確時可以調用表單的submit方法提交表單,使用表單的submit方法時不會執行submit事件處理函數
```
document.formName.onsubmit = function () { //檢查表單
if (result) { this.submit();
} else { return false;
}
};
```
當表單被重置時會發生reset事件,但這個事件意義不大,因為reset按鈕本身意義就不大。同時也有一個reset方法
```
document.formName.onreset = function () { if (confirm("您真的要重置表單嗎?")) { this.reset();
} else { return false;
}
};
```
## 表單元素
### 單選按鈕與復選框
單選按鈕與復選框有個共同的屬性——checked,指明該按鈕是否被選中。而不同的是,往往多個單選按鈕使用同一個name來分到相同的組,且只能有一個被選中,那么,使用這個name訪問它時,由于多個按鈕使用同一個名字,它會返回一個數組,而當只有一個時(事實不存在單選按鈕只有一個單獨存在的情況),它又會返回這個元素
```
var radios = document.formName.radios;//頁面中多個單選按鈕name為radios
alert(radios.length);//返回一個元素列表
var one = document.formName.one;//只有一個
alert(one.checked);//只返回這個元素
```
與checked類似的,它們還有個defaultChecked屬性,返回是否是在HTML指定默認選中的
### 單行文本框與多行文本框
單行文本框即type屬性設為text的input標簽,多行文本框即textarea,它們除了與其它input標簽一樣具有的value屬性處,還具有defaultValue屬性表示文本框中的默認文本,即在HTML里所指定的value值的
文本框還有一個方法:select,可以使文本框中的文字呈選中狀態。
### Select對象
表單元素中最復雜的就算是select對象了。select是一復合對象,它包含option標簽,也有可能包含optgroup標簽。雖然select可以多選,但我們這里只討論單選的,多選的類似!
```
//首先,獲取select對象也是通過name(當然ID仍然有效,但name更快捷)
var select = document.formName.mySel; //要獲取用戶選中了第幾項,可以使用它的selectedIndex
alert(select.selectedIndex);//這個索引號是從0開始的
//select對象有個options偽數組類型的屬性,包含了所有的option,可以使用下標來訪問
alert(select.options[select.selectedIndex].value);//輸出選中項的
alert(select.options[select.selectedIndex].text);//text屬性是option包含的文本
//本來需要知道select里面有多少個option,可以通過options.length
//但HTML DOM為select對象也提供了length屬性
alert(select.length);//輸出和options.length一樣
```
獲取選中項的值
```
var mySel = document.formName.mySel;
alert(mySel.options[mySel.selectedIndex].value); //更快捷的方法
alert(mySel.value);
```
而向select對象中添加option,本可以使用document.createElement及appendChild等方法的,但HTML DOM為我們提供了更方便的方法了
```
var opt = new Option("新增選項文本","選項值");//document.createElement("option");
var select = document.formName.mySel;
select.add(opt,select.options[0]);//將opt添加到第一個option的后面
select.add(opt);//在IE下,沒有第二個參數時,會將opt添加到最后
//上面的代碼在FF下會出錯,必須使用下面的方法
select.add(opt,null);//但這在IE會出錯
//下面的方法可以兩全了,但長了一點
select.add(opt,select.options[select.length-1]); //刪除option的方法remove
select.remove(1);//remove接收參數為要移除
```
options數組最特殊的一個地方在于它和真正的數組十分相似,可以設置它的length來減少元素,也可以直接將元素賦給某項來修改
```
var opts = document.formName.mySel.options;
opts[0]=new Option("Text","Value");
opts.length=2;//將移去第三個之后的option
opts[3]=new Options("ABC",123);//自動添加一個元素
```
Option對象也有defaultSelected屬性返回在HTML里指定是否是默認選中項
## 表單元素特性事件
當表單控件失去焦點時會觸發blur事件,當控件獲得焦點時又會觸發focus事件。與之對應,blur方法將使表單控件失去焦點,focus方法將使控件獲得焦點,與Form對象的submit方法一樣,使用JavaScript執行blur方法與focus方法并不會觸發相關事件監聽函數
select對象的change事件:當用戶選中一個選項,或者取消了對一個選項的選定時,就會發生change事件。
textarea對象的change事件:當用戶改變文本區域的值然后通過把鍵盤焦點移動到其他地方“確認”這些改變的時候,發生change事件。
select事件:當文本框中的文本被選中時發生
- 介紹
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超鏈接和路徑
- 第 5 章 分組元素
- 第 6 章 表格元素
- 第 7 章 文檔元素
- 第 8 章 嵌入元素
- 第 9 章 音頻和視頻
- 第 10 章 表單元素[上]
- 第 10 章 表單元素[中]
- 第 10 章 表單元素[下]
- 第 11 章 全局屬性和其他
- 第 12 章 CSS 入門
- 第 13 章 CSS 選擇器[上]
- 第 14 章 CSS 顏色與度量單位
- 第 15 章 CSS 文本樣式[上]
- 第 15 章 CSS 文本樣式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 邊框與背景[上]
- 第 17 章 CSS 邊框與背景[下]
- 第 18 章 CSS 表格與列表
- 第 19 章 CSS 其他樣式
- 第 20 章 CSS3 前綴和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 邊框圖片效果
- 第 24 章 CSS3 變形效果[下]
- 第 25 章 CSS3 過渡效果
- 第 26 章 CSS3 動畫效果
- 第 27 章 CSS 傳統布局[上]
- 第 27 章 CSS 傳統布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 彈性伸縮布局[上]
- 第 29 章 CSS3 彈性伸縮布局[中]
- 第 29 章 CSS3 彈性伸縮布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介紹
- 第 2 章 排版樣式
- 第 3 章 表格和按鈕
- 第 4 章 表單和圖片
- 第 5 章 柵格系統
- 第 6 章 輔組類和響應式工具
- 第 7 章 圖標菜單按鈕組件
- 第 8 章 輸入框和導航組件
- 第 9 章 路徑分頁標簽和徽章組件
- 第 10 章 巨幕頁頭縮略圖和警告框組件
- 第 11 章 進度條媒體對象和 Well 組件
- 第 12 章 列表組面板和嵌入組件
- 第 13 章 模態框插件
- 第 14 章 下拉菜單和滾動監聽插件
- 第 15 章 標簽頁和工具提示插件
- 第 16 章 彈出框和警告框插件
- 第 17 章 按鈕和折疊插件
- 第 18 章 輪播插件
- 第 19 章 附加導航插件
- 第 20 章 項目實戰--響應式導航[1]
- 第 20 章 項目實戰--響應式輪播圖[2]
- 第 20 章 項目實戰--首頁內容介紹[上][3]
- 第 20 章 項目實戰--首頁內容介紹[下][4]
- 第 20 章 項目實戰--資訊內容[5,6]
- 第 20 章 項目實戰--案例和關于[7]
- javaScript 教程
- javascript快速入門1--JavaScript前世今生,HelloWorld與開發環境
- javascript快速入門2--變量,小學生數學與簡單的交互
- javascript快速入門3--分支判斷與循環
- javascript快速入門4--函數與內置對象
- javascript快速入門5--數組與對象
- javascript快速入門6--Script標簽與訪問HTML頁面
- javascript快速入門7--ECMAScript語法基礎
- javascript快速入門8--值,類型與類型轉換
- javascript快速入門9--引用類型
- javascript快速入門10--運算符,語句
- javascript快速入門11--正則表達式
- javascript快速入門12--函數式與面向對象
- javascript快速入門13--BOM——瀏覽器對象模型(Browser Object Model)
- javascript快速入門14--DOM基礎
- javascript快速入門15--節點
- javascript快速入門15--表單
- javascript快速入門16--表格
- javascript快速入門17--事件
- javascript快速入門18--樣式
- javascript快速入門19--定位
- javascript快速入門20--Cookie
- javascript快速入門21--DOM總結
- javascript快速入門22--Ajax簡介
- javascript快速入門23--XHR—XMLHttpRequest對象
- javascript快速入門24--XML基礎
- javascript快速入門25--瀏覽器中的XML
- javascript快速入門26--XPath
- javascript快速入門27--XSLT基礎
- PHP 教程
- 第一章 如何加載運行已發布的PHP項目
- 第二章 PHP基礎
- 第三章 操作符與控制結構
- 第四章 數學運算
- 第五章 數組
- 第六章 目錄與文件
- 第七章 自定義函數
- 第八章 字符串處理
- 第九章 正則表達式
- 第十章 日期與時間
- 第十一章 表單與驗證
- 第十二章 會話控制
- 第十三章 上傳文件
- 第十四章 處理圖像
- 第十五章 MySQL 數據庫
- 第十六章 PHP 操作MySQL
- 第十七章 面向對象基礎
- 第十八章 面向對象的特性
- 第十九章 面向對象的工具