<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>