详谈表单格式化插件jquery.serializeJSON(2)

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

options配置

默认配置

Values始终为字符串(除非在input names使用:types )

Keys始终为字符串(默认不自动检测是否需要转换为数组)

未选择的checkboxes会被忽略

disabled的elements会被忽略

自定义配置

包含未勾选的checkboxes

serializeJSON 支持 checkboxUncheckedValue 配置,或者可以在checkboxes添加 data-unchecked-value 属性。

默认方法:

<form> <input type="checkbox" value="true" checked/> <input type="checkbox" value="true"/> <input type="checkbox" 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> <input type="checkbox" value="true" data-unchecked-value="false" checked/> <input type="checkbox" value="1" data-unchecked-value="0" checked/> <input type="checkbox" value="YUP" checked/> <input type="checkbox" value="true" data-unchecked-value="false" /> <input type="checkbox" value="1" data-unchecked-value="0" /> <input type="checkbox" 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": "" }

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

var emptyStringsAndZerosToNulls = function(val, inputName) { if (val === "") return null; // parse empty strings as nulls if (val === 0) return null; // parse 0 as null return val; } $('form').serializeJSON({parseWithFunction: emptyStringsAndZerosToNulls, parseNumbers: true}); // returns => { "bool": { "true": "true", "false": "false", } "number": { "0": null, // <-- parsed with custom function "1": 1, "2.2": 2.2, "-2.25": -2.25, } "null": "null", "string": "text is always string", "empty": null // <-- parsed with custom function }

自定义类型

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

<form> <input type="text" value="not boo"/> <input type="text" value="str"/> <input type="text" value="5"/> </form>

$('form').serializeJSON({ customTypes: { alwaysBoo: function(str) { // value is always a string return "boo"; }, string: function(str) { // all strings will now end with " override" return str + " override"; } } }); // returns => { "scary": "boo", // <-- parsed with type :alwaysBoo "str": "str override", // <-- parsed with new type :string (instead of the default) "number": 5, // <-- the default :number still works }

忽略空表单字段

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

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

使用useIntKeyAsArrayIndex配置

<form> <input type="text" value="foo"/> <input type="text" value="var"/> <input type="text" value="inn"/> </form>

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


$('form').serializeJSON(); // returns => {'arr': {'0': 'foo', '1': 'var', '5': 'inn' }}

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

$('form').serializeJSON({useIntKeysAsArrayIndex: true}); // returns => {'arr': ['foo', 'var', undefined, undefined, undefined, 'inn']}

默认配置Defaults

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfpwj.html