Jquery 將表單序列化為Json對象

jopen 10年前發布 | 20K 次閱讀 jQuery Ajax框架 JSON

先用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。下面,我將插件做進一步的修改,讓其支持多選。代碼如下:

 

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

 測試結果:

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!