首頁 >web前端 >js教程 >表單格式化外掛程式jquery.serializeJSON

表單格式化外掛程式jquery.serializeJSON

巴扎黑
巴扎黑原創
2017-06-23 10:59:581337瀏覽

前言

前端在處理含有大量資料提交的表單時,除了使用Form直接提交刷新頁面之外,經常碰到的需求是收集表單資訊成資料對象,Ajax提交。

而在處理複雜的表單時,需要一個區手動判斷處理欄位值,顯得非常麻煩。接下來介紹的插件將解決這個問題。

關於serializeJSON

使用jquery.serializeJSON,可以在基於jQuery或Zepto的頁面中,呼叫 .serializeJSON() 方法來序列化form表單的資料成JS物件。

使用

只需要在jQuery或Zepto時候引入即可

範例

 HTML form(支援inputtextarea

    等標籤)
  •  

    <form id="my-profile">
        <!-- simple attribute -->
        <input type="text" name="fullName"              value="Mario Izquierdo" />
     
        <!-- nested attributes -->
        <input type="text" name="address[city]"         value="San Francisco" />
        <input type="text" name="address[state][name]"  value="California" />
        <input type="text" name="address[state][abbr]"  value="CA" />
     
        <!-- array -->
        <input type="text" name="jobbies[]"             value="code" />
        <input type="text" name="jobbies[]"             value="climbing" />
     
        <!-- textareas, checkboxes ... -->
        <textarea              name="projects[0][name]">serializeJSON</textarea>
        <textarea              name="projects[0][language]">javascript</textarea>
        <input type="hidden"   name="projects[0][popular]" value="0" />
        <input type="checkbox" name="projects[0][popular]" value="1" checked />
     
        <textarea              name="projects[1][name]">tinytest.js</textarea>
        <textarea              name="projects[1][language]">javascript</textarea>
        <input type="hidden"   name="projects[1][popular]" value="0" />
        <input type="checkbox" name="projects[1][popular]" value="1"/>
     
        <!-- select -->
        <select name="selectOne">
            <option value="paper">Paper</option>
            <option value="rock" selected>Rock</option>
            <option value="scissors">Scissors</option>
        </select>
     
        <!-- select multiple options, just name it as an array[] -->
        <select multiple name="selectMultiple[]">
            <option value="red"  selected>Red</option>
            <option value="blue" selected>Blue</option>
            <option value="yellow">Yellow</option>
        </select>
    </form>
  • javascript
  •  

$('#my-profile').serializeJSON(); 
// returns =>{
    fullName: "Mario Izquierdo",
 
    address: {
    city: "San Francisco",
    state: {
        name: "California",
        abbr: "CA"}
    },
 
    jobbies: ["code", "climbing"],
 
    projects: {'0': { name: "serializeJSON", language: "javascript", popular: "1" },'1': { name: "tinytest.js?1.1.10",   language: "javascript", popular: "0" }
    },
 
    selectOne: "rock",
    selectMultiple: ["red", "blue"]
}
  •  

    serializeJSON
  • 方法傳回一個JS對象,並非JSON字串。可以使用 JSON.stringify

     轉換成字串(注意IE8相容性)。

    JavaScript權威指南(第6版)(中文版) 

     

    var jsonString = JSON.stringify(obj);

     

    #指定資料型別取得到的屬性值一般是字串,可以透過HTML指定型別: type 進行強制轉換。

     

    :type

     標記。

     

    <form>
      <input type="text" name="number[1]"     data-value-type="number"  value="1"/>
      <input type="text" name="number[1.1]"   data-value-type="number"  value="1.1"/>
      <input type="text" name="boolean[true]" data-value-type="boolean" value="true"/>
      <input type="text" name="null[null]"    data-value-type="null"    value="null"/>
      <input type="text" name="auto[string]"  data-value-type="auto"    value="0"/>
    </form>

    Values總是為字串(除非在總是為字串(預設不自動偵測是否需要轉換為陣列)

    未選取的checkboxes

    會被忽略會被忽略#############自訂設定#########
    写法                                 释义
    checkboxUncheckedValue: string      针对未勾选的checkboxes,设定值
    parseBooleans: true                 自动检测转换”true”、”false”为布尔值true、false
    parseNumbers: true                  自动检测转换”1″、”33.33″、”-44″为数字1、33.33、-44
    parseNulls: true                    自动检测字符串”null”为null
    parseAll: true                      自动检测转换以上类型的字符串
    parseWithFunction: function         自定义转换函数 function(value, name){return parsedValue}customTypes: {}                     自定义:types覆盖默认types,如{type: function(value){…}}
    defaultTypes: {defaultTypes}        重新定义所有的:types,如{type: function(value){…}}
    useIntKeysAsArrayIndex: true        当keys为整数时,将序列化为数组
    ###### # ######## 包含未勾選的checkboxes######serializeJSON 支援 ###checkboxUncheckedValue### 配置,或可在###checkboxes###新增 ###data-unchecked-value ### 屬性。 ######預設方法:######### #########
    <form>
      <input type="checkbox" name="check1" value="true" checked/>
      <input type="checkbox" name="check2" value="true"/>
      <input type="checkbox" name="check3" value="true"/>
    </form>
    ######
    $('form').serializeJSON(); 
    // returns =>{'check1': 'true'} // Note that check2 and check3 are not included because they are not checked
    ###### ########## ###上面的寫法會忽略未勾選的複選框。如果需要包含,則可以使用下列方法:######1. 設定###checkboxUncheckedValue############ #########
    $('form').serializeJSON({checkboxUncheckedValue: "false"}); 
    // returns =>{'check1': 'true', check2: 'false', check3: 'false'}
    ##### # ############2. 新增###data-unchecked-value###屬性######### ###
    <form id="checkboxes">
      <input type="checkbox" name="checked[bool]"  value="true" data-unchecked-value="false" checked/>
      <input type="checkbox" name="checked[bin]"   value="1"    data-unchecked-value="0"     checked/>
      <input type="checkbox" name="checked[cool]"  value="YUP"                               checked/>
     
      <input type="checkbox" name="unchecked[bool]"  value="true" data-unchecked-value="false" />
      <input type="checkbox" name="unchecked[bin]"   value="1"    data-unchecked-value="0" />
      <input type="checkbox" name="unchecked[cool]"  value="YUP" /> <!-- No unchecked value specified -->
    </form>
    #######
    $('form#checkboxes').serializeJSON(); // Note no option is used
     // returns =>{  'checked': {'bool':  'true','bin':   '1','cool':  'YUP'
      },  'unchecked': {'bool': 'false','bin':  '0'// Note that unchecked cool does not appear, because it doesn't use data-unchecked-value  }
    }
    ## #### ############自動偵測轉換類型######預設的型別為字串 ###:string### ,可以透過設定轉換為其它型別## ####### ###
    $('form').serializeJSON({parseNulls: true, parseNumbers: true}); 
    // returns =>{  "bool": {"true": "true", // booleans are still strings, because parseBooleans was not set"false": "false",
      }  "number": {"0": 0, // numbers are parsed because parseNumbers: true"1": 1,"2.2": 2.2,"-2.25": -2.25,
      }  "null": null, // "null" strings are converted to null becase parseNulls: true
      "string": "text is always string",  "empty": ""}
    ###### ##########

    在极少数情况下,可以使用自定义转换函数

    自定义类型

    可以使用 customTypes 配置自定义类型或者覆盖默认类型($.serializeJSON.defaultOptions.defaultTypes

    忽略空表单字段

    // Select only imputs that have a non-empty value$(&#39;form :input[value!=""]&#39;).serializeJSON(); 
    // Or filter them from the formobj = $(&#39;form&#39;).find(&#39;input&#39;).not(&#39;[value=""]&#39;).serializeJSON(); 
    // For more complicated filtering, you can use a functionobj = $form.find(&#39;:input&#39;).filter(function () {          return $.trim(this.value).length > 0  }).serializeJSON();

    使用整数keys作为数组的顺序

    使用useIntKeyAsArrayIndex配置

    按照默认的方法,结果为:

    使用useIntKeyAsArrayIndex可以将记过转换为数组并制定顺序

    默认配置Defaults

    所有的默认配置均定义在 $.serializeJSON.defaultOptions,可以进行修改。

    总结

    这个插件支持的配置非常丰富,自定义程度很高,带来很大的便捷性。

    以上是表單格式化外掛程式jquery.serializeJSON的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    上一篇:jquery.validata.js 外掛程式集合,想要的都在這裡下一篇:jquery.validata.js 外掛程式集合,想要的都在這裡

    相關文章

    看更多