<div class="htmledit_views">javascript
<p><span style="font-size:18px;">jQuery Form插件是一個優秀的Ajax表單插件,能夠很是容易地、無侵入地升級HTML表單以支持Ajax。jQuery Form有兩個核心方法 -- ajaxForm() 和 ajaxSubmit(), 它們集合了從控制表單元素到決定如何管理提交進程的功能。另外,插件還包括其餘的一些方法: formToArray()、formSerialize()、fieldSerialize()、fieldValue()、clearForm()、clearFields() 和 resetForm()等。</span></p> <p><span style="font-size:18px;">下載地址: <a href="http://malsup.com/jquery/form/#download" target="_blank"> http://malsup.com/jquery/form/#download</a><br></span></p> <p><span style="font-size:18px;">核心方法 -- ajaxForm() 和 ajaxSubmit()</span></p> <p></p> <div class="dp-highlighter bg_javascript"><div class="bar"><div class="tools"><b>[javascript]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 263px; top: 536px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 263px; top: 536px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_5" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_5" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span>$(</span><span class="string">'#myForm'</span><span>).ajaxForm(</span><span class="keyword">function</span><span>() { </span></span></li><li class=""><span> $(<span class="string">'#output1'</span><span>).html(</span><span class="string">"提交成功!歡迎下次再來!"</span><span>).show(); </span></span></li><li class="alt"><span>}); </span></li><li class=""><span> </span></li><li class="alt"><span>$(<span class="string">'#myForm2'</span><span>).submit(</span><span class="keyword">function</span><span>() { </span></span></li><li class=""><span> $(<span class="keyword">this</span><span>).ajaxSubmit(</span><span class="keyword">function</span><span>() { </span></span></li><li class="alt"><span> $(<span class="string">'#output2'</span><span>).html(</span><span class="string">"提交成功!歡迎下次再來!"</span><span>).show(); </span></span></li><li class=""><span> }); </span></li><li class="alt"><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span><span class="comment">//阻止表單默認提交</span><span> </span></span></li><li class=""><span>}); </span></li></ol></div><pre class="javascript" name="code" style="display: none;">$('#myForm').ajaxForm(function() { $('#output1').html("提交成功!歡迎下次再來!").show(); }); html
$('#myForm2').submit(function() { $(this).ajaxSubmit(function() {
$('#output2').html("提交成功!歡迎下次再來!").show();
}); return false; //阻止表單默認提交 });</pre><span style="font-size:18px;">經過Form插件的兩個核心方法,均可以在不修改表單的HTML代碼結構的狀況下,輕易地將表單的提交方式升級爲Ajax提交方式<br> ajaxForm() 和 ajaxSubmit() 都能接受0個或1個參數,當爲單個參數時,該參數既能夠是一個回調函數,也能夠是一個options對象,上面的例子就是回調函數,下面介紹options對象,使得它們對錶單擁有更多的控制權</span>java
<p></p> <p></p> <div class="dp-highlighter bg_javascript"><div class="bar"><div class="tools"><b>[javascript]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 263px; top: 923px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 263px; top: 923px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_6" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_6" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=6&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span class="keyword">var</span><span> options = { </span></span></li><li class=""><span> target: <span class="string">'#output'</span><span>, </span><span class="comment">//把服務器返回的內容放入id爲output的元素中 </span><span> </span></span></li><li class="alt"><span> beforeSubmit: showRequest, <span class="comment">//提交前的回調函數</span><span> </span></span></li><li class=""><span> success: showResponse, <span class="comment">//提交後的回調函數</span><span> </span></span></li><li class="alt"><span> <span class="comment">//url: url, //默認是form的action, 若是申明,則會覆蓋</span><span> </span></span></li><li class=""><span> <span class="comment">//type: type, //默認是form的method(get or post),若是申明,則會覆蓋</span><span> </span></span></li><li class="alt"><span> <span class="comment">//dataType: null, //html(默認), xml, script, json...接受服務端返回的類型</span><span> </span></span></li><li class=""><span> <span class="comment">//clearForm: true, //成功提交後,清除全部表單元素的值</span><span> </span></span></li><li class="alt"><span> <span class="comment">//resetForm: true, //成功提交後,重置全部表單元素的值</span><span> </span></span></li><li class=""><span> timeout: 3000 <span class="comment">//限制請求的時間,當請求大於3秒後,跳出請求</span><span> </span></span></li><li class="alt"><span>} </span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">function</span><span> showRequest(formData, jqForm, options){ </span></span></li><li class=""><span> <span class="comment">//formData: 數組對象,提交表單時,Form插件會以Ajax方式自動提交這些數據,格式如:[{name:user,value:val },{name:pwd,value:pwd}]</span><span> </span></span></li><li class="alt"><span> <span class="comment">//jqForm: jQuery對象,封裝了表單的元素 </span><span> </span></span></li><li class=""><span> <span class="comment">//options: options對象</span><span> </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> queryString = $.param(formData); </span><span class="comment">//name=1&address=2</span><span> </span></span></li><li class=""><span> <span class="keyword">var</span><span> formElement = jqForm[0]; </span><span class="comment">//將jqForm轉換爲DOM對象</span><span> </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> address = formElement.address.value; </span><span class="comment">//訪問jqForm的DOM元素</span><span> </span></span></li><li class=""><span> <span class="keyword">return</span><span> </span><span class="keyword">true</span><span>; </span><span class="comment">//只要不返回false,表單都會提交,在這裏能夠對錶單元素進行驗證</span><span> </span></span></li><li class="alt"><span>}; </span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">function</span><span> showResponse(responseText, statusText){ </span></span></li><li class=""><span> <span class="comment">//dataType=xml</span><span> </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> name = $(</span><span class="string">'name'</span><span>, responseXML).text(); </span></span></li><li class=""><span> <span class="keyword">var</span><span> address = $(</span><span class="string">'address'</span><span>, responseXML).text(); </span></span></li><li class="alt"><span> $(<span class="string">"#xmlout"</span><span>).html(name + </span><span class="string">" "</span><span> + address); </span></span></li><li class=""><span> <span class="comment">//dataType=json</span><span> </span></span></li><li class="alt"><span> $(<span class="string">"#jsonout"</span><span>).html(data.name + </span><span class="string">" "</span><span> + data.address); </span></span></li><li class=""><span>}; </span></li><li class="alt"><span> </span></li><li class=""><span>$(<span class="string">"#myForm"</span><span>).ajaxForm(options); </span></span></li><li class="alt"><span> </span></li><li class=""><span>$(<span class="string">"#myForm2"</span><span>).submit(funtion(){ </span></span></li><li class="alt"><span> $(<span class="keyword">this</span><span>).ajaxSubmit(options); </span></span></li><li class=""><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span><span class="comment">//阻止表單默認提交</span><span> </span></span></li><li class="alt"><span>}); </span></li></ol></div><pre class="javascript" name="code" style="display: none;">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秒後,跳出請求 }jquery
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,表單都會提交,在這裏能夠對錶單元素進行驗證 };ajax
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); };json
$("#myForm").ajaxForm(options);數組
$("#myForm2").submit(funtion(){ $(this).ajaxSubmit(options); return false; //阻止表單默認提交 });服務器
</pre> <p></p> <p>表單提交以前進行驗證: beforeSubmit會在表單提交前被調用,若是beforeSubmit返回false,則會阻止表單提交<br></p> <p></p> <div class="dp-highlighter bg_javascript"><div class="bar"><div class="tools"><b>[javascript]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 263px; top: 1700px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 263px; top: 1700px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_7" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_7" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=7&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-c"><li class="alt"><span><span>beforeSubmit: validate </span></span></li><li class=""><span><span class="keyword">function</span><span> validate(formData, jqForm, options) { </span><span class="comment">//在這裏對錶單進行驗證,若是不符合規則,將返回false來阻止表單提交,直到符合規則爲止</span><span> </span></span></li><li class="alt"><span> <span class="comment">//方式一:利用formData參數</span><span> </span></span></li><li class=""><span> <span class="keyword">for</span><span> (</span><span class="keyword">var</span><span> i=0; i < formData.length; i++) { </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (!formData[i].value) { </span></span></li><li class=""><span> alert(<span class="string">'用戶名,地址和自我介紹都不能爲空!'</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="comment">//方式二:利用jqForm對象</span><span> </span></span></li><li class=""><span> <span class="keyword">var</span><span> form = jqForm[0]; </span><span class="comment">//把表單轉化爲dom對象</span><span> </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (!form.name.value || !form.address.value) { </span></span></li><li class=""><span> alert(<span class="string">'用戶名和地址不能爲空,自我介紹能夠爲空!'</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comment">//方式三:利用fieldValue()方法,fieldValue 是表單插件的一個方法,它能找出表單中的元素的值,返回一個集合。</span><span> </span></span></li><li class="alt"><span> <span class="keyword">var</span><span> usernameValue = $(</span><span class="string">'input[name=name]'</span><span>).fieldValue(); </span></span></li><li class=""><span> <span class="keyword">var</span><span> addressValue = $(</span><span class="string">'input[name=address]'</span><span>).fieldValue(); </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (!usernameValue[0] || !addressValue[0]) { </span></span></li><li class=""><span> alert(<span class="string">'用戶名和地址不能爲空,自我介紹能夠爲空!'</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">var</span><span> queryString = $.param(formData); </span><span class="comment">//組裝數據</span><span> </span></span></li><li class="alt"><span> <span class="comment">//alert(queryString); //相似 : name=1&add=2 </span><span> </span></span></li><li class=""><span> <span class="keyword">return</span><span> </span><span class="keyword">true</span><span>; </span></span></li><li class="alt"><span>} </span></li></ol></div><pre class="javascript" name="code" style="display: none;">beforeSubmit: validate function validate(formData, jqForm, options) { //在這裏對錶單進行驗證,若是不符合規則,將返回false來阻止表單提交,直到符合規則爲止 //方式一:利用formData參數 for (var i=0; i < formData.length; i++) { if (!formData[i].value) { alert('用戶名,地址和自我介紹都不能爲空!'); return false; } } app
//方式二:利用jqForm對象 var form = jqForm[0]; //把表單轉化爲dom對象 if (!form.name.value || !form.address.value) { alert('用戶名和地址不能爲空,自我介紹能夠爲空!'); return false; }dom
//方式三:利用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;
}</pre><br><br> </div>