`
niqingyang
  • 浏览: 42466 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jquery插件序列化表单为JSON对象

    博客分类:
  • YII
阅读更多
// 合并赋值
	function mergeSetValue(object, name, value, merge) {
		// 相同的name不进行替换,而是进行合并,合并成为一个数组
		if (merge == false) {
			object[name] = value;
		} else {
			// 相同的name不进行替换,而是进行合并,合并成为一个数组
			if (object[name]) {
				if ($.isArray(object[name])) {
					object[name].push(value);
				} else {
					object[name] = [object[name], value];
				}
			} else {
				object[name] = value;
			}
		}
	}

	// 解析变量
	function resolveVarName(object, name, value, merge) {
		// 识别是否符合格式:A[A][]、A[A]、A[A][A]
		// 不符合则当成字符串,符合则解析成对象
		if (new RegExp("^[a-zA-Z_][a-zA-Z0-9_]+((\\[[a-zA-Z0-9_]+\\]))*(\\[\\])?$").test(name)) {
			// 识别出[A]部分
			var subNames = name.match(new RegExp("\\[[a-zA-Z0-9_]+\\]", "g"));

			// 如果不包含“[”则直接赋值返回
			if (name.indexOf("[") < 0) {
				// 相同的name不进行替换,而是进行合并,合并成为一个数组
				mergeSetValue(object, name, value, merge);
				return object;
			}

			// 识别出变量名
			var var_name = name.substring(0, name.indexOf("["));

			if (object[var_name] == undefined) {
				object[var_name] = [];
			}

			// 设置临时变量
			var temp = object[var_name];

			for (i in subNames) {
				var subName = subNames[i];
				if (temp[subName] == undefined) {
					temp[subName] = [];
				}
				if (i == subNames.length - 1) {
					// 如果是以[]结尾则代表为数组
					if (new RegExp("\\[\\]$").test(name)) {
						temp[subName].push(value);
					} else {
						// 相同的name不进行替换,而是进行合并,合并成为一个数组
						mergeSetValue(temp, subName, value, merge);
					}
				}
				temp = temp[subName];
			}

			if (subNames == null || subNames.length == 0) {
				// 如果是以[]结尾则代表为数组
				if (new RegExp("\\[\\]$").test(name)) {
					object[var_name].push(value);
				} else {
					// 相同的name不进行替换,而是进行合并,合并成为一个数组
					mergeSetValue(object, var_name, value, merge);
				}
			}

			return object;
		} else {
			if (merge == false) {
				object[name] = value;
			} else {
				// 相同的name不进行替换,而是进行合并,合并成为一个数组
				mergeSetValue(object, name, value, merge);
			}
			return object;
		}
	}

	/**
	 * 将表单序列号为JSON对象
	 * 
	 * @param merge
	 *            相同name的元素是否进行合并,默认不进行合并,true-进行合并 false-不进行合并
	 */
	$.fn.serializeJson = function(merge) {

		if (merge == undefined || merge == null) {
			merge = false;
		}

		var serializeObj = {};
		var array = [];

		// 判断当前元素是否为input元素
		if ($(this).is(":input")) {
			array = $(this).serializeArray();
		} else {
			array = $(this).find(":input").serializeArray();
		}

		$(array).each(function() {
			resolveVarName(serializeObj, this.name, this.value, merge);
		});
		return serializeObj;
	};

 一般这样:

 

 也可以这样玩:



 

 

  • 大小: 24.6 KB
  • 大小: 10 KB
  • 大小: 31.5 KB
  • 大小: 7.2 KB
分享到:
评论

相关推荐

    jQuery实现form表单序列化转换为json对象功能示例

    本文实例讲述了jQuery实现form表单序列化转换为json对象功能。分享给大家供大家参考,具体如下: 做web前端开发时,需要ajax提交大量表单数据,如果一个个form字段拼接很费劲也容易出错,下面方法可解决这个问题 &...

    jQuery序列化form表单数据为JSON对象的实现方法

    jquery提供的serialize方法能够实现。 $("#searchForm").serialize(); 但是,观察输出的信息,发现serialize()方法做的是将表单中的数据以htpp请求格式拼接成字符串。 serialize确实是能够解决一般的提交数据。但是...

    前端from表单序列化json插件依赖json2 jquery

    from表单序列化json插件 , 插件支持key-value数据的存储 one-many

    jQuery实现form表单元素序列化为json对象的方法

    这段代码序列化form表单元素为json对象: &lt;!Doctype html&gt; &lt;html xmlns=http://www.w3.org/1999/xhtml&gt; &lt;head&gt; &lt;title&gt;jQuery扩展——form序列化到json对象&lt;/title&gt; &lt;meta ...

    JQuery扩展包-多种序列化方式

    Jquery自带的序列化,仅对form表单进行序列化,有很大的局限性,现在对齐进行扩展可以进行任意的序列化,包括json格式,字符串格式、数组格式,数组时自动转化为字符串等。并可以根据开发需要,随时扩展自己想要的...

    jquery序列化form表单使用ajax提交后处理返回的json数据

    主要介绍了jquery序列化form表单,使用ajax提交后处理返回的json数据的示例,需要的朋友可以参考下

    将JavaScript的jQuery库中表单转化为JSON对象的方法

    主要介绍了将JavaScript的jQuery库中表单转化为JSON对象的方法,包括对序列化时空格问题的处理方法,需要的朋友可以参考下

    jQuery序列化后的表单值转换成Json

    通过$(#form).serializeArray()输出以数组形式序列化表单值。 [ {name: 'firstname', value: 'Hello'}, {name: 'lastname', value: 'World'}, {name: 'alias'}, // 值为空 ] 统统不满足小朋友想得到Json的愿望。...

    serializeObject:这个jQuery插件将序列化数组数据映射到JSON对象

    serializeObject 该jquery插件会将序列化的表单数据数组映射到JSON Object。相依性库。开始导入库。 导入插件。首次使用 $( "form" ).serializeObject();二次使用 var rFormat = {id: 0,name: "John Doe"};$( "form...

    form表单的序列化与反序列化

    基于jquery实现的form表单的序列化与反序列化。除了基本的form元素外,增加了easyui combobox的序列化与反序列化,其它类型的如有需要可自行实现。 下拉框会怎么生成以"_autoAppText"的属性记录文本,反序列时,会...

    unserialize:jQuery 反序列化插件

    jQuery 反序列化插件 概述: 这个插件包含两个函数,它们的工作方式与 jQuery 的“serialize()”函数相反。 也就是说,“序列化”采用一种形式(或输入的集合)并为 HTTP 请求返回正确的序列化字符串,此插件中的...

    Jquery 组合form元素为json格式,asp.net反序列化

    作者:敖士伟 Email:ikmb@163.com 转载注明作者 说明: 1、js根据表单元素class属性,把表单元素的name和value组合为json格式;用表单元素class属性可以针对性地组合JSON数据。 2、后端ASP.NET用...

    JSON转换方法总结

    此文档为json Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。 有人用替换的方法,先用serialize序列化后,将&替换成“:”...

    jquery.serialize-hash:jQuery插件,该插件从表单的序列化返回哈希值。 支持输入名称的小写

    #jQuery序列化哈希插件 在麻省理工学院(MIT)许可下由托管。 jQuery插件,该插件从表单或任何DOM元素的序列化返回哈希值。 它在嵌套哈希的输入名称上支持方括号。 如果要从表单获取值并将其与另一个哈希合并,...

Global site tag (gtag.js) - Google Analytics