serialize()方法经过序列化表单值,建立URL编码文本字符串。他的操做对象是表明表单元素集合的jquery对象,不过也能够针对个别的表单元素进行序列化javascript
表单元素得几种类型:<input> <textarea> <select>html
表单序列化:java
表单个别元素序列化jquery
serialize()序列化汉字会是乱码数组
缘由:serialize()自动调用了encodeURIComponent()方法,将数据编码了数据结构
解决办法:调用decodeURIComponent()方法将数据解码this
例如:编码
<script type="text/javascript"> $(document).ready(function(){ $("#btnSubmit").click(function(){ var serializeVal=$("#formDataSubmit").serialize(); // 将序列化表单解码 serializeVal=decodeURIComponent(serializeVal,true); console.log("表单元素序列化输出的值------------"); console.log(serializeVal); }); }); </script>
输出结果截图:spa
汉字再也不是乱码了prototype
注意:使用序列化时,必须给要序列化的字段加上name属性
序列化后建立的是对象数组(名称和值),返回JSON数据结构
注意:此方法返回的是 JSON 对象而非 JSON 字符串。
返回的 JSON 对象是由一个对象数组组成的,其中每一个对象包含一个或两个名值对 —— name 参数和 value 参数(若是 value 不为空的话)。举例来讲:
[ {name: 'firstname', value: 'Hello'}, {name: 'lastname', value: 'World'}, {name: 'alias'}, // 值为空 ]
注意:禁用的元素不会被序列化,文件选择的元素也不会被序列化
序列化的代码:
<script type="text/javascript"> $(document).ready(function(){ $("#btnSubmit").click(function(){ //表单序列化数组 var serializeVal=$("#formDataSubmit").serializeArray(); console.log("表单元素序列化数组输出的值------------"); console.log(serializeVal); }); }); </script>
序列化输出的结果:
由上面代码和效果图能够看到不须要编码和解码
遍历输出属性和值能够用如下方法
console.log("遍历数组输出的值------------"); $.each(serializeVal,function(i,file){ console.log("name:"+file.name+",value:"+file.value); })
效果图以下:
序列化后建立的是对象,jquery自己是没有这个方法的,我本身封装的一个
代码以下:
$.prototype.serializeObj=function(){ var arr=this.serializeArray(); var obj={}; $.each(arr,function(index,file){ if(!(file.name in obj)){ obj[file.name]=file.value; } }); return obj; }
效果图以下:
注意:当序列化表单中出现多个相同的name时,serializeObj只会取到第一个name
单选按钮时:相同的name,获取的是checked的那个按钮值
多选按钮时:相同的name,获取的是第一个的checked的那个按钮值
代码以下
<form id="formDataSubmit" name="formDataSubmit"> <div> <label>姓名</label> <input type="text" name="userName" class="userName"> </div> <div> <label>年龄</label> <input type="text" name="age"> </div> <div> <label>职业</label> <input type="text" name="occupation"> </div> <div> <label>性别</label> <input type="radio" name="sex" id="sex" value="男"> <label>男</label> <input type="radio" name="sex" id="sex" value="女"> <label>女</label> </div> <div> <label>爱好</label> <input type="checkbox" name="checkbox" value="游泳"> <label>游泳</label> <input type="checkbox" name="checkbox" value="拳击"> <label>拳击</label> <input type="checkbox" name="checkbox" value="打篮球"> <label>打篮球</label> <input type="checkbox" name="checkbox" value="踢足球"> <label>踢足球</label> </div> </form>
效果图:
以一下代码为例来总结下三种形式的区别
<form id="formDataSubmit" name="formDataSubmit"> <div> <label>姓名</label> <input type="text" name="userName" class="userName"> </div> <div> <label>年龄</label> <input type="text" name="age"> </div> <div> <label>职业</label> <input type="text" name="occupation"> </div> <div> <label>性别</label> <input type="radio" name="sex" id="sex" value="男"> <label>男</label> <input type="radio" name="sex" id="sex" value="女"> <label>女</label> </div> <div> <label>爱好</label> <input type="checkbox" name="checkbox" value="游泳"> <label>游泳</label> <input type="checkbox" name="checkbox" value="拳击"> <label>拳击</label> <input type="checkbox" name="checkbox" value="打篮球"> <label>打篮球</label> <input type="checkbox" name="checkbox" value="踢足球"> <label>踢足球</label> </div> </form>
区别:
是一款表单序列化的插件,本人也用于开发中过,兼容性也还不错,附上连接地址