大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。
我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:
-
-
-
-
-
function
resetQuery(formId){
-
var
fid =
"#"
+ formId;
-
var
str = $(fid).serialize();
-
-
var
ob= strToObj(str);
-
alert(ob.startdate);
-
}
-
function
strToObj(str){
-
str = str.replace(/&/g,
"','"
);
-
str = str.replace(/=/g,
"':'"
);
-
str =
"({'"
+str +
"'})"
;
-
obj = eval(str);
-
return
obj;
-
}
/**
* 重置form表单
* @param formId form的id
*/
function resetQuery(formId){
var fid = "#" + formId;
var str = $(fid).serialize();
//str= cardSelectDate=3&startdate=2012-02-01&enddate=2012-02-04
var ob= strToObj(str);
alert(ob.startdate);//2012-02-01
}
function strToObj(str){
str = str.replace(/&/g,"','");
str = str.replace(/=/g,"':'");
str = "({'"+str +"'})";
obj = eval(str);
return obj;
}
个人感觉这样做有bug。
我的方法是,先用serializeArray序列化为数组,再封装为Json对象。
下面是表单:
-
<
form
id
=
"myForm"
action
=
"#"
>
-
<
input
name
=
"name"
/>
-
<
input
name
=
"age"
/>
-
<
input
type
=
"submit"
/>
-
</
form
>
<form id="myForm" action="#">
<input name="name"/>
<input name="age"/>
<input type="submit"/>
</form>
Jquery插件代码如下:
-
(
function
($){
-
$.fn.serializeJson=
function
(){
-
var
serializeObj={};
-
$(
this
.serializeArray()).each(
function
(){
-
serializeObj[
this
.name]=
this
.value;
-
});
-
return
serializeObj;
-
};
-
})(jQuery);
(function($){
$.fn.serializeJson=function(){
var serializeObj={};
$(this.serializeArray()).each(function(){
serializeObj[this.name]=this.value;
});
return serializeObj;
};
})(jQuery);
下面测试一下:$("#myForm").bind("submit",function(e){
-
e.preventDefault();
-
console.log($(
this
).serializeJson());
-
});
e.preventDefault();
console.log($(this).serializeJson());
});
测试结果:
输入a,b提交,得到序列化结果
{age: "b",name: "a"}
上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:
-
(
function
($){
-
$.fn.serializeJson=
function
(){
-
var
serializeObj={};
-
var
array=
this
.serializeArray();
-
var
str=
this
.serialize();
-
$(array).each(
function
(){
-
if
(serializeObj[
this
.name]){
-
if
($.isArray(serializeObj[
this
.name])){
-
serializeObj[
this
.name].push(
this
.value);
-
}
else
{
-
serializeObj[
this
.name]=[serializeObj[
this
.name],
this
.value];
-
}
-
}
else
{
-
serializeObj[
this
.name]=
this
.value;
-
}
-
});
-
return
serializeObj;
-
};
-
})(jQuery);
(function($){
$.fn.serializeJson=function(){
var serializeObj={};
var array=this.serializeArray();
var str=this.serialize();
$(array).each(function(){
if(serializeObj[this.name]){
if($.isArray(serializeObj[this.name])){
serializeObj[this.name].push(this.value);
}else{
serializeObj[this.name]=[serializeObj[this.name],this.value];
}
}else{
serializeObj[this.name]=this.value;
}
});
return serializeObj;
};
})(jQuery);
这里,我将多选的值封装为一个数值来进行处理。如果大家使用的时候需要将多选的值封装为“,"连接的字符串或者其他形式,请自行修改相应代码。
测试如下:
表单:
-
<
form
id
=
"myForm"
action
=
"#"
>
-
<
input
name
=
"name"
/>
-
<
input
name
=
"age"
/>
-
<
select
multiple
=
"multiple"
name
=
"interest"
size
=
"2"
>
-
<
option
value
=
"interest1"
>
interest1
</
option
>
-
<
option
value
=
"interest2"
>
interest2
</
option
>
-
<
option
value
=
"interest3"
>
interest3
</
option
>
-
<
option
value
=
"interest4"
>
interest4
</
option
>
-
</
select
>
-
<
input
type
=
"checkbox"
name
=
"vehicle"
value
=
"Bike"
/>
I have a bike
-
<
input
type
=
"checkbox"
name
=
"vehicle"
value
=
"Car"
/>
I have a car
-
<
input
type
=
"submit"
/>
-
</
form
>
<form id="myForm" action="#">
<input name="name"/>
<input name="age"/>
<select multiple="multiple" name="interest" size="2">
<option value ="interest1">interest1</option>
<option value ="interest2">interest2</option>
<option value="interest3">interest3</option>
<option value="interest4">interest4</option>
</select>
<input type="checkbox" name="vehicle" value="Bike" /> I have a bike
<input type="checkbox" name="vehicle" value="Car" /> I have a car
<input type="submit"/>
</form>
测试结果:
{age: "aa",interest: ["interest2", "interest4"],name: "dd",vehicle:["Bike","Car"]}
分享到:
相关推荐
### 将表单序列化为JSON对象:深入解析与应用 #### 一、知识点概述 在Web开发中,经常需要处理HTML表单数据,并将其发送到服务器进行进一步处理。传统的做法是通过`form`标签的`submit`事件来提交表单数据,但这种...
本文将深入探讨如何使用jQuery将HTML表单(form)的元素序列化为JSON(JavaScript Object Notation)对象,这是一种轻量级的数据交换格式,常用于前后端数据传输。 首先,我们需要了解jQuery的`serializeArray()`...
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。 我在网上看到有人用替换的方法,先用serialize序列化后,将&替换...
在处理HTML表单(form)数据时,jQuery提供了一种便捷的方式将表单数据序列化为JSON对象,这对于前后端数据交换尤其有用。本文将深入探讨如何使用jQuery扩展实现这一功能,并解释相关的核心知识点。 首先,`...
from表单序列化json插件 , 插件支持key-value数据的存储 one-many
这两个函数通过遍历表单内所有控件,并根据控件类型处理name和value,最终构建出一个对象,该对象将表单中的数据以键值对的形式存储,方便后续处理和使用。 自定义的$.fn.serializeJson函数将序列化后的数组转换成...
将方法.serializeJSON()添加到以将表单序列化为JavaScript对象。 支持与Ruby on Rails中使用的嵌套参数相同的格式。 安装 使用bower install jquery.serializeJSON或 npm install jquery-serializejson ,或仅下载...
jQuery提供了一个方便的方法来序列化表单数据,并将其转换为JSON对象,这在使用Ajax提交表单时特别有用。本文将通过一个示例来讲解如何使用jQuery实现这一功能。 首先,我们需要一个HTML表单,如下所示: ```html ...
它旨在使将表单字段序列化为简单的JSON对象变得容易。 正在安装 npm install dom-form-serializer 基本用法 连载 var serialize = require ( 'dom-form-serializer' ) . serialize serialize ( document . ...
点击“提交”按钮时,使用 jQuery 的 serialize() 方法将表单数据序列化,并使用 Ajax 将数据传递给 PHP 页面。 jQuery 代码 在 jQuery 代码中,我们使用点击事件来触发 Ajax 请求。当点击“提交”按钮时,我们...
jQuery提供了一个方便的插件,叫做`serializeJSON`,它能够将表单数据序列化为JSON对象。首先,确保在项目中引入了jQuery库和`serializeJSON.js`插件: ```html <script src="https://code.jquery....
4. HTML页面与JavaScript交互:在HTML页面中,JavaScript可以用来处理用户交互,获取表单数据,然后通过Ajax请求将这些数据序列化为JSON格式发送到服务器。例如,使用jQuery的`$.ajax`方法: ```javascript let ...
然而,jQuery作为一个广泛使用的JavaScript库,并没有直接提供将表单序列化为JSON对象的内置方法。尽管如此,开发者社区已经提出了解决方案,使得我们可以借助现有的方法实现这一功能。 首先,来看一下jQuery的...
4. **序列化表单数据为JSON**:jQuery提供`serializeArray()`和`serializeObject()`(非官方插件)方法将表单数据转换为JSON格式,便于发送Ajax请求: ```javascript var formData = $('form').serializeArray();...
本文将详细介绍如何使用jQuery将一个表单序列化为一个对象。 首先,了解什么是表单序列化。在HTML中,表单是由`<form>`元素及其子元素(如`<input>`, `<select>`, `<textarea>`等)组成的,用于收集用户输入的数据...
标题提到的"jQuery将表单序列化成一个Object对象的实例",主要涉及到jQuery的`serializeArray()`方法和自定义扩展功能,以适应开发者对于更方便的数据结构的需求。 `serializeArray()`是jQuery提供的一个方法,用于...