您的位置:首頁>正文

JavaScript表單腳本

什麼是表單?

一個表單有三個基本組成部分: 表單標籤:這裡面包含了處理表單數據所用CGI程式的URL以及資料提交到伺服器的方法。 表單欄位:包含了文字方塊、密碼框、隱藏欄位、多行文字方塊、核取方塊、單選框、下拉選擇框和檔上傳框等。 表單按鈕:包括提交按鈕、重定按鈕和一般按鈕;用於將資料傳送到伺服器上的CGI腳本或者取消輸入, 還可以用表單按鈕來控制其他定義了處理腳本的處理工作。

JavaScript與表單間的關係:JS最初的應用就是用於分擔伺服器處理表單的責任, 打破依賴伺服器的局面, 儘管目前web和javascript都有了長足的發展,

web表單依然沒有為許多常見的任務提供現成的解決方案, 很多開發人員不僅會在驗證表單的時候使用javascript, 而且還會用來增強一些標準表單控制項的默認行為。

一 ,表單的基礎知識

在HTML中, 表單由form標籤, 在javascript中, 表單對應HTMLFormElement類型, HTMLFormElement類型繼承HTMLElement類型, 所有它和其他的Element元素有相同的預設屬性, 同時它也有自己的屬性和方法:

acceptCharset:伺服器能夠處理的字元集;等價於 HTML 中的 accept-charset 特性。

action:接受請求的 URL;等價於 HTML 中的 action 特性 。

elements:表單中所有控制項的集合(HTMLCollection)。

enctype:請求的編碼類型;等價於 HTML 中的 enctype 特性。

length:表單中控制項的數量。

method:要發送的 HTTP 請求類型, 通常是"get"或"post";等價於 HTML 的 method 特性。

name:表單的名稱;等價於 HTML 的 name 特性。

reset():將所有表單欄位重置為預設值。

submit():提交表單。

target:用於發送請求和接收回應的窗口名稱;等價於 HTML 的 target 特性。

要取得form表單元素的方法有: var form=document.getElementById('form1'); //通過id來取得表單元素

var firstForm=document.forms[0]; //通過document.forms來取得頁面中的所有表單元素, 通過索引值’0‘, 取得第一個表單元素

var form2=document.forms['form2']; //通過document.forms來取得頁面中的所有表單元素, 通過name值取得特定的表單元素

提交表單:

以這種方式提交表單時, 流覽器會在將請求發送給伺服器之前觸發 submit 事件。 這樣, 我們就有

機會驗證表單數據, 並據以決定是否允許表單提交。 阻止這個事件的默認行為就可以取消表單提交

在JS中我們同樣可以以程式設計的方式調用submit()方法來提交表單:

var form = document.getElementById("myForm");

//提交表單

form.submit();

阻止表單提交(阻止默認事件):

var form = document.getElementById("myForm");

EventUtil.addHandler(form, "submit", function(event){

//取得事件對象

event = EventUtil.getEvent(event);

//阻止默認事件

EventUtil.preventDefault(event);

});

在表單數據無效而不能發送給伺服器時,

可以使用這一技術

重置表單:

在重置表單時, 所有表單字段都會恢復到頁面剛載入完畢時的初

始值

用JS方法來重置表單:

var form = document.getElementById("myForm");

//重置表單

form.reset();

阻止重置表單的默認操作:

var form = document.getElementById("myForm");

EventUtil.addHandler(form, "reset", function(event){

//取得事件對象

event = EventUtil.getEvent(event);

//阻止表單重置

EventUtil.preventDefault(event);

});

表單字段:

每個表單都有Element屬性, 該屬性是表單中所有表單元素(欄位)的集合。 這個集合是一個有序列表, 每個表單字段在element集合中出現的順序

, 與在標記中出現的先後順序相同, 可以按位置和name值來訪問他們。 常見的表單字段有input, select, fieldset, 要取得表單中的表單字段:

var form = document.getElementById("form1");

//取得表單中的第一個欄位

var field1 = form.elements[0];

//取得名為"textbox1"的欄位

var field2 = form.elements["textbox1"];

//取得表單中包含的欄位的數量

var fieldCount = form.elements.length;

共有的表單字段屬性:

disabled:布林值, 表示當前欄位是否被禁用。

form:指向當前欄位所屬表單的指標;唯讀。

name:當前欄位的名稱。

readOnly:布林值, 表示當前欄位是否唯讀。

tabIndex:表示當前欄位的切換(tab)序號。

type:當前欄位的類型, 如"checkbox"、 "radio", 等等。

value:當前欄位將被提交給伺服器的值。 對檔欄位來說, 這個屬性是唯讀的, 包含著檔

在電腦中的路徑

除了 form 屬性之外, 可以通過 JavaScript 動態修改其他任何屬性。

能夠動態修改表單字段屬性, 意味著我們可以在任何時候, 以任何方式來動態動作表單。

使用者可能會重複按一下表單的提交按鈕。 在涉及信用卡消費時, 這就是個問題:因為會導致費用翻番。

為此, 最常見的解決方案, 就是在第一次按一下後就禁用提交按鈕。 只要偵聽 submit事件, 並在該事件

發生時禁用提交按鈕即可 :

//避免多次提交表單

EventUtil.addHandler(form, "submit", function(event){

event = EventUtil.getEvent(event);

var target = EventUtil.getTarget(event);

//取得提交按鈕

var btn = target.elements["submit-btn"];

//禁用它

btn.disabled = true;

});

除了

之外, 所有表單字段都有 type 屬性。 對於元素, 這個值等於 HTML 特

性 type 的值。 對於其他元素, 這個 type 屬性的值如下表所列。

共有的表單字段方法 :

每個表單字段都有兩個方法: focus()和 blur()。

使用 focus()方法, 可以將使用者的注意力吸引到頁面中的某個部位。 例如, 在頁面

載入完畢後, 將焦點轉移到表單中的第一個欄位。

EventUtil.addHandler(window, "load", function(event){ /*給window綁定一個監聽事件, 放頁面載入完成, 游標自動對準在指定的表單字段*/

document.forms[0].elements[0].focus();

});

HTML5 為表單字段新增了一個 autofocus 屬性。 在支援這個屬性的流覽器中, 只要設置這個屬性,

不用 JavaScript 就能自動把焦點移動到相應欄位。 例如:

與 focus()方法相對的是 blur()方法, 它的作用是從元素中移走焦點:

document.forms[0].elements[0].blur();

change事件:對於