电竞比分网-中国电竞赛事及体育赛事平台

分享

Jquery將表單轉(zhuǎn)化成Json對(duì)象

 java_laq小館 2014-01-22

大家知道Jquery中有serialize方法,可以將表單序列化為一個(gè)“&”連接的字符串,但卻沒有提供序列化為Json的方法。不過,我們可以寫一個(gè)插件實(shí)現(xiàn)。

 

我在網(wǎng)上看到有人用替換的方法,先用serialize序列化后,將&替換成“:”、“‘”:

Js代碼
/**

* 重置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;
}

個(gè)人感覺這樣做有bug。

 

我的方法是,先用serializeArray序列化為數(shù)組,再封裝為Json對(duì)象。

 

 

下面是表單:

Html代碼

<form id=”myForm” action=”#”>
<input name=”name”/>
<input name=”age”/>
<input type=”submit”/>
</form>

Html代碼  收藏代碼
  1. <form id=”myForm” action=”#”>
  2.     <input name=”name”/>
  3.     <input name=”age”/>
  4.     <input type=”submit”/>
  5. </form>

 

Jquery插件代碼如下:

Js代碼

(function($){
$.fn.serializeJson=function(){
var serializeObj={};
$(this.serializeArray()).each(function(){
serializeObj[this.name]=this.value;
});
return serializeObj;
};
})(jQuery);

下面測(cè)試一下:$(“#myForm”).bind(“submit”,function(e){

Js代碼e.preventDefault();
console.log($(this).serializeJson());
});

輸入a,b提交,得到序列化結(jié)果

{age: “b”,name: “a”}

 

 

上面的插件,不能適用于有多個(gè)值的輸入控件,例如復(fù)選框、多選的select。下面,我將插件做進(jìn)一步的修改,讓其支持多選。代碼如下:

Js代碼

(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);

這里,我將多選的值封裝為一個(gè)數(shù)值來(lái)進(jìn)行處理。如果大家使用的時(shí)候需要將多選的值封裝為“,”連接的字符串或者其他形式,請(qǐng)自行修改相應(yīng)代碼。

 

測(cè)試如下:

表單:

 

Html代碼<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>

測(cè)試結(jié)果:

{age: “aa”,interest: ["interest2", "interest4"],name: “dd”,vehicle:["Bike","Car"]}


來(lái)自:http://www./jquery-form-to-json/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多