在表单提交时设置JSON格式
Format JSON on form submit
(背景)我正在构建一个简单的表单构建器,用户可以在其中创建调查/问卷。一旦用户完成设计将用于创建实际表单的表单,我就会创建一个 json 输出。由于是表单构建器用户,因此正在设计/构建表单,因此可以添加复选框或单选字段或选择框选项,并可以编辑其值和标签。.HTML:
<form class="test-form droppedField checkbox">
<input type="text" name="title" placeholder="Title" class="ctrl-textbox editable"></input>
<input type="text" name="subtitle" placeholder="Sub Title" class="ctrl-textbox editable"></input>
<input type="text" name="name" placeholder="Name/Keyword" class="ctrl-textbox editable">
<input type="hidden" name="type" value="checkbox">
<ul>
<li>
<div class="ctrl-checkboxgroup children" name="children">
<input type="checkbox">
<input name="label" type="text" value="" placeholder="Option Label.." class="input-small editable">
<input type="text" value="" name="value" placeholder="Option Value.." class="input-small editable opt-value">
</div>
<div class="ctrl-checkboxgroup children" name="children">
<input type="checkbox">
<input name="label" type="text" value="" placeholder="Option Label.." class="input-small editable">
<input type="text" value="" name="value" placeholder="Option Value.." class="input-small editable opt-value">
</div>
</li>
</ul>....
我被困在生成 json 的点上。我希望能够获得一个更干净的 o/p,其中包含作为"孩子"分组的复选框选项/单选/选择框选项。示例 json(我认为会有所帮助):
[
{
"title": "Gender",
"subtitle": "This is a required question.",
"name": "gender",
"children": [
{
"label": "Male",
"value": "male"
},
{
"label": "Female",
"value": "female"
},
{
"label": "Non traditional",
"value": "nontraditional"
}
]
}
]
我现在得到什么:
[
{
"title": "Gender",
"subtitle": "This is a required question.",
"name": "gender",
"label":["Male", "Female", "Non traditional"],
"value":["male", "female", "nontraditional"]
}
]
我在做什么:
$('.test-form').each(function () {
output.push(JSON.stringify($(this).serializeObject()));
});
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
当我把孩子们推到一个数组中迭代它们时:
obj = [];
$('.children').each(function (i,v) {
obj.push(obj[v.name] = v.value);
});
console.log(obj);
我得到:
["Male", "male", "Female", "female", "Non traditional", "nontraditional", label: "Non traditional", value: "nontraditional"]
我很困惑我是否应该重新构建我的 HTML 或者我是否可以更改 JSON 输出。感谢任何形式的帮助。提前谢谢你。
如果可以将元素的"name"属性更改为以下内容,则可以修改serializeObject()
函数以创建所需的JSON:
<li>
<div class="ctrl-checkboxgroup children" name="children">
<input type="checkbox">
<input name="children[0].label" type="text" value="" placeholder="Option Label.." class="input-small editable">
<input name="children[0].value" type="text" value="" placeholder="Option Value.." class="input-small editable opt-value">
</div>
<div class="ctrl-checkboxgroup children" name="children">
<input type="checkbox">
<input name="children[1].label" type="text" value="" placeholder="Option Label.." class="input-small editable">
<input name="children[1].value" type="text" value="" placeholder="Option Value.." class="input-small editable opt-value">
</div>
</li>
当然,serializeObject()
函数的逻辑会更复杂,因为它必须用"."分隔名称并检查方括号。不过这是可能的。
更新:
这是一个jsfiddle,显示了serializeObject()
的样子。它支持以下所有输入名称:
- 三十
- xxx.yyy
- xxx[0]
- xxx[0].yyy
- xxx[0].yyy[0]
- xxx[0][0]
- xxx[0][0].yyy xxx[0][0]
- .yyy[0]
相关文章:
- 在HTML页面上将URL解析为可读的json格式
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)
- 从Particle Photon Webhook到Azure的JSON格式
- json格式的国家数据到层次数据
- 从javascript调用C#Web服务并使用它(json格式)
- HTML表的JSON格式
- 如何将HTML表单(JSON格式)中的数据分配给变量
- Neo4j结果(JSON格式)创建D3树图
- 高图表数据导入 JSON - 格式
- 更改代码以读取不同的 JSON 格式
- JSON 格式问题
- 将JavaScript字典转换为JSON格式
- 将 XML 数据转换为 json 格式 AngularJS
- KendoDatePicker 无法识别从 Web 服务以 JSON 格式返回的日期
- 在表单提交时设置JSON格式
- AngularJS ng重复json格式
- 如何将json格式的数组数据从jquery返回到html
- 为什么 JSON.parse 无法检测参数是否已采用 JSON 格式
- 如何使用jQuery从表中以JSON格式发布数据
- json格式作为cordova或phonegap ios插件的参数