天天看點

Jquery 将表單序列化為Json對象

大家知道Jquery中有serialize方法,可以将表單序列化為一個“&”連接配接的字元串,但卻沒有提供序列化為Json的方法。不過,我們可以寫一個插件實作。

我在網上看到有人用替換的方法,先用serialize序列化後,将&替換成“:”、“‘”:

/**  

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

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

});  

 測試結果:

輸入a,b送出,得到序列化結果

{age: "b",name: "a"}

上面的插件,不能适用于有多個值的輸入控件,例如複選框、多選的select。下面,我将插件做進一步的修改,讓其支援多選。代碼如下:

            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;   

                }  

 這裡,我将多選的值封裝為一個數值來進行處理。如果大家使用的時候需要将多選的值封裝為“,"連接配接的字元串或者其他形式,請自行修改相應代碼。

測試如下:

表單:

    <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  

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

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/4919684.html,如需轉載請自行聯系原作者

繼續閱讀