让我们说要推送一个对象然后执行JSON.stringify
"support_advice": [{
"text": "",
"group": "check_lifestyle_26",
"value": "Physical activity & Exercise"
}]
我现在想推新项目
"support_advice": [{
"text": "",
"group": "check_lifestyle_26",
"value": "Overall General Health & Wellbeing"
}]
通常情况下,我会得到以下内容
"support_advice": [{
"text": "",
"group": "check_lifestyle_26",
"value": "Physical activity & Exercise"
}, {
"text": "",
"group": "check_lifestyle_26",
"value": "Overall General Health & Wellbeing"
}]
但是,是否可以根据组连接值,以便实际输出更像
"support_advice": [{
"text": "",
"group": "check_lifestyle_26",
"value": "Physical activity & Exercise, Overall General Health & Wellbeing"
}]
完整的脚本
下面的脚本循环遍历表单中的每个元素,然后创建JSON,然后将其传递到所需的位置。
这很好用。然而,当问题出现时,复选框就会出现。系统的一部分允许您再次添加表单的部分名称。
对于像textarea或文本输入这样的东西,这很好。但是对于复选框,因为在第一个实例中可能有多个相同的名称,如果我再次添加包含复选框的另一个部分,则下面的脚本将无法在各个部分之间进行解密...
var elem = document.getElementById('rn_QuestionSubmit').elements;
var a = [];
var result = {};
for(var i = 0; i < elem.length; i++)
{
var element = elem[i];
var item = {};
//item.id = element.id;
//item.type = element.type;
if (element.type === 'select-one') {
item.text = element.options[element.selectedIndex].text;
}
else {
item.text = '';
}
item.group = elem[i].dataset.group;
if (element.type === 'radio' || element.type === 'checkbox') {
if (element.checked) {
item.value = element.value;
if (result[element.name]) { result[element.name].push(item) } else { result[element.name] = [item]};
}
}
else {
item.value = element.value;
if (result[element.name]) { result[element.name].push(item) } else { result[element.name] = [item]};
}
}
a.push(JSON.stringify(result));
console.log('['+a.join(',') + ']');
return('['+a.join(',') + ']');
答案 0 :(得分:3)
您需要对代码进行微小更改才能使复选框/单选按钮情况发生:当element.name
中存在result
密钥时,下一次检查将是result
中的最后一个条目{1}}数组具有相同的组。如果是,则修改其value属性,否则,执行您现在已经执行的操作。
以下是代码的一部分:
if (result[element.name]) {
// Get the last entry in the array
var lastEntry = result[element.name].slice(-1)[0];
// If same group, then concatenate the value instead of adding the item
if (lastEntry.group === item.group) {
lastEntry.value += "," + element.value;
} else {
// You already had this:
result[element.name].push(item);
}
// You already had this:
} else {
result[element.name] = [item]
}