<script src="js/jquery.form.js" type="text/javascript"></script>
Jquery Form Plugin是jquery最重要的插件之一,它利用AJAX技術(shù)在不引起頁面刷新的情況下POST表單。主要有兩個(gè)方法:ajaxform和 ajaxsubmit。它會自動收集表單元素內(nèi)容,決定如何管理提交進(jìn)程。這兩個(gè)方法支持多重選擇。我想AJAX方式的表單應(yīng)用再沒有比這個(gè)插件更簡單易用的了。
先在頁面里設(shè)置一個(gè)普通的表單:
Html代碼 復(fù)制代碼
1. <form id=”myForm” action=”comment.php” method=”post”>
2. 姓名: <input type=”text” name=”name” id=”name”/>
3. 評論: <textarea name=”comment” id=”comment”></textarea>
4. <input type=”submit” value=”提交評論” />
5. </form>
6. [/html]
<form id=”myForm” action=”comment.php” method=”post”>
姓名: <input type=”text” name=”name” id=”name”/>
評論: <textarea name=”comment” id=”comment”></textarea>
<input type=”submit” value=”提交評論” />
</form>
[/html]
加載jquery庫和插件腳本庫。然后簡單地寫一段初始化腳本,這段腳本將在DOM加載完成時(shí)執(zhí)行:
Html代碼 復(fù)制代碼
1. <head>
2. <script type=”text/javascript” src=”jquery.js”></script> //加載jquery
3. <script type=”text/javascript” src=”form.js”></script> //加載插件
4. <script type=”text/javascript”>
5. // DOM加載完畢后執(zhí)行
6. $(document).ready(function() {
7. // 綁定’myForm’并定義一個(gè)簡單的回調(diào)函數(shù)
8. $('#myForm').ajaxForm(function() {
9. alert(”評論提交完成!”);
10. });
11. });
12. </script>
13. </head>
14. [/html]
<head>
<script type=”text/javascript” src=”jquery.js”></script> //加載jquery
<script type=”text/javascript” src=”form.js”></script> //加載插件
<script type=”text/javascript”>
// DOM加載完畢后執(zhí)行
$(document).ready(function() {
// 綁定’myForm’并定義一個(gè)簡單的回調(diào)函數(shù)
$('#myForm').ajaxForm(function() {
alert(”評論提交完成!”);
});
});
</script>
</head>
[/html]
OK,就是這么簡單。當(dāng)點(diǎn)擊“提交評論”按鈕后,表單的數(shù)據(jù)就會POST到comment.php腳本,并且返回“評論提交完成”信息(如果提交成功)。頁面并沒有刷新,非常AJAX……
讓我們來看看這個(gè)插件還有什么強(qiáng)大的功能。
ajaxForm
1. 該方法須預(yù)先綁定表單,所以它一般在$(document).ready(function() { …}里定義。它能讓表單在不刷新頁面的情況下POST到目標(biāo)。可以為該方法提供一個(gè)參數(shù),參數(shù)一般是一個(gè)回調(diào)函數(shù)用于返回信息給用戶。當(dāng)然如果不提供參數(shù)也行,只是表單提在無聲無息地提交后無法得到確認(rèn)了。
2. 增加所有需要的事件監(jiān)聽器,為AJAX提交表單做好準(zhǔn)備。ajaxForm不能提交表單。在document的ready函數(shù)中,使用ajaxForm來為 AJAX提交表單進(jìn)行準(zhǔn)備。ajaxForm接受0個(gè)或1個(gè)參數(shù)。這個(gè)單個(gè)的參數(shù)既可以是一個(gè)回調(diào)函數(shù),也可以是一個(gè)Options對象。
可鏈接(Chainable):可以。
實(shí)例:
Js代碼 復(fù)制代碼
1. $('#myFormId').ajaxForm();
$('#myFormId').ajaxForm();
ajaxSubmit
1. 該方法是以響應(yīng)事件來通用AJAX方式提交表單。比如點(diǎn)擊某個(gè)按鈕或改變了某個(gè)下拉框的值,在觸發(fā)事件函數(shù)里可以設(shè)置該方法。如:
Js代碼 復(fù)制代碼
1. $(”#clickme”).click(function(){
2. $(”#myForm”).ajaxSubmit();
3. });
$(”#clickme”).click(function(){
$(”#myForm”).ajaxSubmit();
});
或者這樣:
Html代碼 復(fù)制代碼
1. <select id=”mySelect” onchange=”$(‘#myForm’).ajaxSubmit();”>
<select id=”mySelect” onchange=”$(‘#myForm’).ajaxSubmit();”>
2. 馬上由AJAX來提交表單。大多數(shù)情況下,都是調(diào)用ajaxSubmit來對用戶提交表單進(jìn)行響應(yīng)。ajaxSubmit接受0個(gè)或1個(gè)參數(shù)。這個(gè)單個(gè)的參數(shù)既可以是一個(gè)回調(diào)函數(shù),也可以是一個(gè)Options對象。
可鏈接(Chainable):可以。
實(shí)例:
Js代碼 復(fù)制代碼
1. // 綁定表單提交事件處理器
2. $('#myFormId').submit(function() {
3. // 提交表單
4. $(this).ajaxSubmit();
5. // 為了防止普通瀏覽器進(jìn)行表單提交和產(chǎn)生頁面導(dǎo)航(防止頁面刷新?)返回false
6. return false;
7. });
// 綁定表單提交事件處理器
$('#myFormId').submit(function() {
// 提交表單
$(this).ajaxSubmit();
// 為了防止普通瀏覽器進(jìn)行表單提交和產(chǎn)生頁面導(dǎo)航(防止頁面刷新?)返回false
return false;
});
formSerialize
1. 該方法可以表單域的名稱和值連接起來,形成一個(gè)字符串,字符串格式為name1=value1&name2=value2…比如:
Js代碼 復(fù)制代碼
1. var queryString=$(”#myForm”).formSerialize();
var queryString=$(”#myForm”).formSerialize();
變量queryString的值將為變成name=xxx&comment=xxx。得到這個(gè)字符串后,可以用$.post來提交,
如:
Js代碼 復(fù)制代碼
1. $.post(”comment.php”,queryString);
$.post(”comment.php”,queryString);
2.將表單串行化(或序列化)成一個(gè)查詢字符串。這個(gè)方法將返回以下格式的字符串:name1=value1&name2=value2。
可鏈接(Chainable):不能, 這個(gè)方法返回一個(gè)字符串。
實(shí)例:
Js代碼 復(fù)制代碼
1. var queryString = $('#myFormId').formSerialize();
2.
3. // 現(xiàn)在可以使用$.get、$.post、$.ajax等來提交數(shù)據(jù)
4. $.post('myscript.php', queryString);
var queryString = $('#myFormId').formSerialize();
// 現(xiàn)在可以使用$.get、$.post、$.ajax等來提交數(shù)據(jù)
$.post('myscript.php', queryString);
fieldSerialize
1. 和formSerialize一樣,返回一個(gè)字符串,但返回的是表單指定元素或特定元素類型域的字符串。返回字符串格式也是一樣的。如:var queryString = $(’#myForm :text’).fieldSerialize();//返回myForm表單內(nèi)所有文本框的字符串值。
2.將表單的字段元素串行化(或序列化)成一個(gè)查詢字符串。當(dāng)只有部分表單字段需要進(jìn)行串行化(或序列化)時(shí),這個(gè)就方便了。這個(gè)方法將返回以下格式的字符串:name1=value1&name2=value2。
可鏈接(Chainable):不能,這個(gè)方法返回一個(gè)字符串。
實(shí)例:
Js代碼 復(fù)制代碼
1. var queryString = $('#myFormId .specialFields').fieldSerialize();
var queryString = $('#myFormId .specialFields').fieldSerialize();
fieldValue
1.返回一個(gè)數(shù)組,記錄表單元素的值。如果表單沒有值則對應(yīng)數(shù)組值為空。如:
Js代碼 復(fù)制代碼
1. var data=$(’:text’).fieldValue();//返回所有表單中所有文本框類型的值。
var data=$(’:text’).fieldValue();//返回所有表單中所有文本框類型的值。
變量data為[”,”,”]這樣的一個(gè)數(shù)組,數(shù)組元素對應(yīng)表單元素的值。事實(shí)上我們可以這樣來得到“姓名”文本框里的值:var data=$(”#name”).val();(這個(gè)元素要有ID屬性)這樣的作法不需要jquery form插件也可以得到值。但使用插件可以更方便地取得單個(gè)或多個(gè)表單中特定元素域的值。比如取得所有文本框或所有復(fù)選框的值。只要加個(gè)“:”就可以。這種方法也可以用到formSerialize或fieldSerialize方法上。
Js代碼 復(fù)制代碼
1. var data=$(”#myForm :text”).fieldValue();//取得在myForm表單里所有文本框的值。
var data=$(”#myForm :text”).fieldValue();//取得在myForm表單里所有文本框的值。
2.返回匹配插入數(shù)組中的表單元素值。從0.91版起,該方法將總是以數(shù)組的形式返回?cái)?shù)據(jù)。如果元素值被判定可能無效,則數(shù)組為空,否則它將包含一個(gè)或多于一個(gè)的元素值。
可鏈接(Chainable):不能,該方法返回?cái)?shù)組。
實(shí)例:
Js代碼 復(fù)制代碼
1. // 取得密碼輸入值
2. var value = $('#myFormId :password').fieldValue();
3. alert('The password is: ' + value[0]);
// 取得密碼輸入值
var value = $('#myFormId :password').fieldValue();
alert('The password is: ' + value[0]);
formToArray
同樣也返回一個(gè)數(shù)組,這個(gè)數(shù)組是對象數(shù)組。對象有name和value兩個(gè)屬性,分別記錄表單中的元素名稱和元素值。如:
Js代碼 復(fù)制代碼
1. var data=$(”#myForm”).formToArray();
var data=$(”#myForm”).formToArray();
變量data得到的是一個(gè)對象數(shù)組。data[0].name保存myForm表單中第一個(gè)表單元素的名稱屬性值,這里是”name”。data[0].value保存myForm表單中第一個(gè)表單元素的值,這里就是填了什么值就是什么。
resetForm
1.該方法很簡單啦,恢復(fù)表單初始狀態(tài)。也就恢復(fù)到DOM加載完成時(shí)的表單狀態(tài)。類似“重設(shè)表單”
2.清除表單元素。該方法將所有的文本(text)輸入字段、密碼(password)輸入字段和文本區(qū)域(textarea)字段置空,清除任何select元素中的選定,以及將所有的單選(radio)按鈕和多選(checkbox)按鈕重置為非選定狀態(tài)。
可鏈接(Chainable):可以。
Js代碼 復(fù)制代碼
1. $('#myFormId').clearForm();
$('#myFormId').clearForm();
clearFields
1.清除表單域元素。可以清除特定類型的域元素,比如清除所有文本框的,或所有復(fù)選框的域。
2.清除字段元素。只有部分表單元素需要清除時(shí)才方便使用。
可鏈接(Chainable):可以。
Js代碼 復(fù)制代碼
1. $('#myFormId .specialFields').clearFields();
$('#myFormId .specialFields').clearFields();
Options對象
ajaxForm和ajaxSubmit都支持眾多的選項(xiàng)參數(shù),這些選項(xiàng)參數(shù)可以使用一個(gè)Options對象來提供。Options只是一個(gè)JavaScript對象,它包含了如下一些屬性與值的集合:
target
指明頁面中由服務(wù)器響應(yīng)進(jìn)行更新的元素。元素的值可能被指定為一個(gè)jQuery選擇器字符串,一個(gè)jQuery對象,或者一個(gè)DOM元素。
默認(rèn)值:null。
url
指定提交表單數(shù)據(jù)的URL。
默認(rèn)值:表單的action屬性值
type
指定提交表單數(shù)據(jù)的方法(method):“GET”或“POST”。
默認(rèn)值:表單的method屬性值(如果沒有找到默認(rèn)為“GET”)。
beforeSubmit
表 單提交前被調(diào)用的回調(diào)函數(shù)。“beforeSubmit”回調(diào)函數(shù)作為一個(gè)鉤子(hook),被提供來運(yùn)行預(yù)提交邏輯或者校驗(yàn)表單數(shù)據(jù)。如果 “beforeSubmit”回調(diào)函數(shù)返回false,那么表單將不被提交。“beforeSubmit”回調(diào)函數(shù)帶三個(gè)調(diào)用參數(shù):數(shù)組形式的表單數(shù)據(jù), jQuery表單對象,以及傳入ajaxForm/ajaxSubmit中的Options對象。表單數(shù)組接受以下方式的數(shù)據(jù):
[ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
默認(rèn)值:null
success
表單成功提交后調(diào)用的回調(diào)函數(shù)。如果提供“success”回調(diào)函數(shù),當(dāng)從服務(wù)器返回響應(yīng)后它被調(diào)用。然后由dataType選項(xiàng)值決定傳回responseText還是responseXML的值。
默認(rèn)值:null
dataType
期望返回的數(shù)據(jù)類型。null、“xml”、“script”或者“json”其中之一。dataType提供一種方法,它規(guī)定了怎樣處理服務(wù)器的響應(yīng)。這個(gè)被直接地反映到j(luò)Query.httpData方法中去。下面的值被支持:
'xml':如果dataType == 'xml',將把服務(wù)器響應(yīng)作為XML來對待。同時(shí),如果“success”回調(diào)方法被指定, 將傳回responseXML值。
'json':如果dataType == 'json', 服務(wù)器響應(yīng)將被求值,并傳遞到“success”回調(diào)方法,如果它被指定的話。
'script':如果dataType == 'script', 服務(wù)器響應(yīng)將求值成純文本。
默認(rèn)值:null(服務(wù)器返回responseText值)
semantic
Boolean flag indicating whether data must be submitted in strict semantic order (slower). Note that the normal form serialization is done in semantic order with the exception of input elements of type="image". You should only set the semantic option to true if your server has strict semantic requirements and your form contains an input element of type="image".
布 爾標(biāo)志,表示數(shù)據(jù)是否必須嚴(yán)格按照語義順序(slower?)來進(jìn)行提交。注意:一般來說,表單已經(jīng)按照語義順序來進(jìn)行了串行化(或序列化),除了 type="image"的input元素。如果你的服務(wù)器有嚴(yán)格的語義要求,以及表單中包含有一個(gè)type="image"的input元素,就應(yīng)該將 semantic設(shè)置為true。(譯注:這一段由于無法理解,翻譯出來可能語不達(dá)意,但請達(dá)人指正。)
默認(rèn)值:false
resetForm
布爾標(biāo)志,表示如果表單提交成功是否進(jìn)行重置。
Default value: null
clearForm
布爾標(biāo)志,表示如果表單提交成功是否清除表單數(shù)據(jù)。
默認(rèn)值:null
實(shí)例:
Js代碼 復(fù)制代碼
1. // 準(zhǔn)備好Options對象
2. var options = {
3. target: '#divToUpdate',
4. url: 'comment.php',
5. success: function() {
6. alert('Thanks for your comment!');
7. } };
8.
9. // 將options傳給ajaxForm
10. $('#myForm').ajaxForm(options);
// 準(zhǔn)備好Options對象
var options = {
target: '#divToUpdate',
url: 'comment.php',
success: function() {
alert('Thanks for your comment!');
} };
// 將options傳給ajaxForm
$('#myForm').ajaxForm(options);
注意:Options對象還可以用來將值傳遞給jQuery的$.ajax方法。如果你熟悉$.ajax所支持的options,你可以利用它們來將Options對象傳遞給ajaxForm和ajaxSubmit。