一、前提說明
Form Plugin API 里提供了很多有用的方法可以讓你輕松的處理表單里的數據和表單的提交過程。
測試環境:部署到Tomcat中的web項目。
二、簡單介紹
本文演示的是:jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可選參數項對象
$('#myForm').ajaxForm(function() { $('#output1').html("提交成功!歡迎下次再來!").show(); }); $('#myForm2').submit(function() { $(this).ajaxSubmit(function() { $('#output2').html("提交成功!歡迎下次再來!").show(); }); return false; //阻止表單默認提交 });
通過Form插件的兩個核心方法,都可以在不修改表單的HTML代碼結構的情況下,輕易地將表單的提交方式升級為Ajax提交方式
ajaxForm() 和 ajaxSubmit() 都能接受0個或1個參數,當為單個參數時,該參數既可以是一個回調函數,也可以是一個options對象,上面的例子就是回調函數,下面介紹options對象,使得它們對表單擁有更多的控制權
var options = { target: '#output', //把服務器返回的內容放入id為output的元素中 beforeSubmit: showRequest, //提交前的回調函數 success: showResponse, //提交后的回調函數 //url: url, //默認是form的action, 如果申明,則會覆蓋 //type: type, //默認是form的method(get or post),如果申明,則會覆蓋 //dataType: null, //html(默認), xml, script, json...接受服務端返回的類型 //clearForm: true, //成功提交后,清除所有表單元素的值 //resetForm: true, //成功提交后,重置所有表單元素的值 timeout: 3000 //限制請求的時間,當請求大於3秒后,跳出請求 } function showRequest(formData, jqForm, options){ //formData: 數組對象,提交表單時,Form插件會以Ajax方式自動提交這些數據,格式如:[{name:user,value:val },{name:pwd,value:pwd}] //jqForm: jQuery對象,封裝了表單的元素 //options: options對象 var queryString = $.param(formData); //name=1&address=2 var formElement = jqForm[0]; //將jqForm轉換為DOM對象 var address = formElement.address.value; //訪問jqForm的DOM元素 return true; //只要不返回false,表單都會提交,在這里可以對表單元素進行驗證 }; function showResponse(responseText, statusText){ //dataType=xml var name = $('name', responseXML).text(); var address = $('address', responseXML).text(); $("#xmlout").html(name + " " + address); //dataType=json $("#jsonout").html(data.name + " " + data.address); }; $("#myForm").ajaxForm(options); $("#myForm2").submit(funtion(){ $(this).ajaxSubmit(options); return false; //阻止表單默認提交 });
表單提交之前進行驗證: beforeSubmit會在表單提交前被調用,如果beforeSubmit返回false,則會阻止表單提交
beforeSubmit: validate function validate(formData, jqForm, options) { //在這里對表單進行驗證,如果不符合規則,將返回false來阻止表單提交,直到符合規則為止 //方式一:利用formData參數 for (var i=0; i < formData.length; i++) { if (!formData[i].value) { alert('用戶名,地址和自我介紹都不能為空!'); return false; } } //方式二:利用jqForm對象 var form = jqForm[0]; //把表單轉化為dom對象 if (!form.name.value || !form.address.value) { alert('用戶名和地址不能為空,自我介紹可以為空!'); return false; } //方式三:利用fieldValue()方法,fieldValue 是表單插件的一個方法,它能找出表單中的元素的值,返回一個集合。 var usernameValue = $('input[name=name]').fieldValue(); var addressValue = $('input[name=address]').fieldValue(); if (!usernameValue[0] || !addressValue[0]) { alert('用戶名和地址不能為空,自我介紹可以為空!'); return false; } var queryString = $.param(formData); //組裝數據 //alert(queryString); //類似 : name=1&add=2 return true; }
三、詳細介紹參數
ajaxForm()和ajaxSubmit()的可選參數項對象
ajaxForm 和 ajaxSubmit 都支持大量的可選參數,它們通過可選參數項對象傳入。可選參數項對象只是一個簡單的 JavaScript對象,里邊包含了一些屬性和一些值:
target
用server端返回的內容更換指定的頁面元素的內容。 這個值可以用jQuery 選擇器來表示, 或者是一個jQuery 對象, 一個 DOM 元素。
缺省值: null
url
表單提交的地址。
缺省值: 表單的action的值
type
表單提交的方式,'GET' 或 'POST'.
缺省值: 表單的 method 的值 (如果沒有指明則認為是 'GET')
beforeSubmit
表單提交前執行的方法。這個可以用在表單提交前的預處理,或表單校驗。如果'beforeSubmit'指定的函數返回false,則表單不會被提交。 'beforeSubmit'函數調用時需要3個參數:數組形式的表單數據,jQuery 對象形式的表單對象,可選的用來傳遞給ajaxForm/ajaxSubmit 的對象。
數組形式的表單數據是下面這樣的格式:[ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
缺省值: null
success
當表單提交后執行的函數。 如果'success' 回調函數被指定,當server端返回對表單提交的響應后,這個方法就會被執行。 responseText 和 responseXML 的值會被傳進這個參數 (這個要依賴於dataType的類型).
缺省值: null
dataType
指定服務器響應返回的數據類型。其中之一: null, 'xml', 'script', 或者 'json'. 這個 dataType 選項用來指示你如何去處理server端返回的數據。 這個和 jQuery.httpData 方法直接相對應。
下面就是可以用的選項:
'xml': 如果 dataType == 'xml' 則 server 端返回的數據被當作是 XML 來處理, 這種情況下'success'指定的回調函數會被傳進去 responseXML 數據
'json': 如果 dataType == 'json' 則server端返回的數據將會被執行,並傳進'success'回調函數
'script': 如果 dataType == 'script' 則server端返回的數據將會在上下文的環境中被執行
缺省值: null
semantic
一個布爾值,用來指示表單里提交的數據的順序是否需要嚴格按照語義的順序。一般表單的數據都是按語義順序序列化的,除非表單里有一個type="image"元素. 所以只有當表單里必須要求有嚴格順序並且表單里有type="image"時才需要指定這個。
缺省值: false
resetForm
布爾值,指示表單提交成功后是否需要重置。
缺省值: null
clearForm
布爾值,指示表單提交成功后是否需要清空。
缺省值: null
iframe
布爾值,用來指示表單是否需要提交到一個iframe里。 這個用在表單里有file域要上傳文件時。更多信息請參考 代碼示例 頁面里的File Uploads 文檔。
缺省值: false
四、案例
1、引入依賴的js
<script src="jquery-1.3.1.js" type="text/javascript"></script> <script src="jquery.form.js" type="text/javascript"></script>
網盤下載:https://yunpan.cn/crjzfmXqaTu9e 訪問密碼 e3bc
2、編寫頁面
<!-- demo1 --> <form id="myForm" action="ajax2.jsp" method="post"> 名稱: <input type="text" name="name" /> <br/> 地址: <input type="text" name="address" /><br/> 自我介紹: <textarea name="comment"></textarea> <br/> <input type="submit" id="test" value="提交" /> <br/> <div id="output1" ></div> </form>
3、調用方法
<script type="text/javascript"> $(document).ready(function() { var options = { target: '#output1', // 用服務器返回的數據 更新 id為output1的內容. beforeSubmit: showRequest, // 提交前 success: showResponse, // 提交后 //另外的一些屬性: //url: url // 默認是form的action,如果寫的話,會覆蓋from的action. //type: type // 默認是form的method,如果寫的話,會覆蓋from的method.('get' or 'post'). //dataType: null // 'xml', 'script', or 'json' (接受服務端返回的類型.) //clearForm: true // 成功提交后,清除所有的表單元素的值. resetForm: true // 成功提交后,重置所有的表單元素的值. //由於某種原因,提交陷入無限等待之中,timeout參數就是用來限制請求的時間, //當請求大於3秒后,跳出請求. //timeout: 3000 }; //'ajaxForm' 方式的表單 . $('#myForm').ajaxForm(options); //或者 'ajaxSubmit' 方式的提交. //$('#myForm').submit(function() { // $(this).ajaxSubmit(options); // return false; //來阻止瀏覽器提交. //}); }); // 提交前 function showRequest(formData, jqForm, options) { // formdata是數組對象,在這里,我們使用$.param()方法把他轉化為字符串. var queryString = $.param(formData); //組裝數據,插件會自動提交數據 alert(queryString); //類似 : name=1&add=2 return true; } // 提交后 function showResponse(responseText, statusText) { alert('狀態: ' + statusText + '\n 返回的內容是: \n' + responseText); } </script>
4、詳細代碼:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可選參數項對象. </title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="jquery-1.3.1.js" type="text/javascript"></script> <script src="jquery.form.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { var options = { target: '#output1', // 用服務器返回的數據 更新 id為output1的內容. beforeSubmit: showRequest, // 提交前 success: showResponse, // 提交后 //另外的一些屬性: //url: url // 默認是form的action,如果寫的話,會覆蓋from的action. //type: type // 默認是form的method,如果寫的話,會覆蓋from的method.('get' or 'post'). //dataType: null // 'xml', 'script', or 'json' (接受服務端返回的類型.) //clearForm: true // 成功提交后,清除所有的表單元素的值. resetForm: true // 成功提交后,重置所有的表單元素的值. //由於某種原因,提交陷入無限等待之中,timeout參數就是用來限制請求的時間, //當請求大於3秒后,跳出請求. //timeout: 3000 }; //'ajaxForm' 方式的表單 . $('#myForm').ajaxForm(options); //或者 'ajaxSubmit' 方式的提交. //$('#myForm').submit(function() { // $(this).ajaxSubmit(options); // return false; //來阻止瀏覽器提交. //}); }); // 提交前 function showRequest(formData, jqForm, options) { // formdata是數組對象,在這里,我們使用$.param()方法把他轉化為字符串. var queryString = $.param(formData); //組裝數據,插件會自動提交數據 alert(queryString); //類似 : name=1&add=2 return true; } // 提交后 function showResponse(responseText, statusText) { alert('狀態: ' + statusText + '\n 返回的內容是: \n' + responseText); } </script> </head> <body> <h3> Demo 4 : jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可選參數項對象. </h3> <!-- demo1 --> <form id="myForm" action="ajax2.jsp" method="post"> 名稱: <input type="text" name="name" /> <br/> 地址: <input type="text" name="address" /><br/> 自我介紹: <textarea name="comment"></textarea> <br/> <input type="submit" id="test" value="提交" /> <br/> <div id="output1" ></div> </form> </body> </html>
新建一個ajax2.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8");//防止亂碼! String name = request.getParameter("name"); String address = request.getParameter("address"); String comment = request.getParameter("comment"); System.out.println(name + " - " +address + " - " +comment); out.println(name + " " +address + " " +comment); %>
5、測試效果:
填寫數據:
提交表單的內容:
從服務器返回的數據: