【发布时间】:2019-04-09 19:50:40
【问题描述】:
我希望在 JSON 数组中将输入记录到我的表单中,但我不知道为什么它用“{}”记录空项目,当我想在之后使用它时,这是我的视图表单的错误。
我的 javascript 代码:
function update_CF_Data(CF_SortablesForm){
var mySelector = $("#cf-sortables-form");
var data_array = new Array();
$("#cf-sortables-form :input").not("#cf-sortables-form :input[class=optionprix]").each(function(){
var optionPrix = $(this).siblings("input.optionprix").val();
var item = {};
item['name'] = $(this).attr('name');
item['value'] = $(this).attr('value');
if ($(this).hasClass('optionname')){
item['optionprix'] = optionPrix;
}
data_array.push(item);
});
var sortableContent = JSON.stringify(data_array);
$('#custom_fields').val(sortableContent);
};
html 表单:
<form id="cf-sortables-form">
<ul>
<li class="ui-state-default">
<small>Radio Buttons</small>
<p><input class="cf-required-checkbox" checked="checked" type="checkbox" name="required---4969523" id="required---4969523"> <label for="required---4969523">Champs Obligatoire</label></p>
<input type="text" name="radio-buttons-label---4969523___required" value="Utilisateurs :">
<ul id="cf-radio-buttons" class="ui-sortable">
<li class="ui-state-default">
<input type="text" class="optionname" name="single-radio-button---4969523" value="1 ou 2">
<img src="images/icon-euro.png" alt="Prix" width="16" height="16">
<input type="text" class="optionprix" name="single-radio-button---4969523" value="0">
</li>
</ul>
<button class="cfButton button" data-type="single-radio-button"><i class="booked-icon booked-icon-plus"></i> Radio Button</button>
</li>
<li class="ui-state-default">
<small>Checkboxes</small>
<p><input class="cf-required-checkbox" checked="checked" type="checkbox" name="required---8940009" id="required---8940009"> <label for="required---8940009">Champs Obligatoire</label></p>
<input type="text" name="checkboxes-label---8940009___required" value="Options Payantes :">
<ul id="cf-checkboxes" class="ui-sortable">
<li class="ui-state-default">
<input type="text" class="optionname" name="single-checkbox---8940009" value="Option 1" optionprix="5">
<img src="images/icon-euro.png" alt="Prix" width="16" height="16">
<input type="text" class="optionprix" name="single-checkbox---8940009" value="5">
</li>
</ul>
<button class="cfButton button" data-type="single-checkbox"><i class="booked-icon booked-icon-plus"></i> Checkbox</button>
</li>
<li class="ui-state-default">
<small>Paragraphe de texte</small>
<p><input class="cf-required-checkbox" checked="checked" type="checkbox" name="required---6402519" id="required---6402519"> <label for="required---6402519">Champs Obligatoire</label></p>
<input type="text" name="paragraph-text-label---6402519___required" value="Remarque éventuelle :">
</li>
</ul>
</form>
JSON 记录数组:
[{\"name\":\"required---4969523\",\"value\":\"on\"},{\"name\":\"radio-buttons-label---4969523___required\",\"value\":\"Utilisateurs :\"},{\"name\":\"single-radio-button---4969523\",\"value\":\"1 ou 2\",\"optionprix\":\"0\"},{},{\"name\":\"required---8940009\",\"value\":\"on\"},{\"name\":\"checkboxes-label---8940009___required\",\"value\":\"Options Payantes :\"},{\"name\":\"single-checkbox---8940009\",\"value\":\"Option 1\",\"optionprix\":\"5\"},{},{\"name\":\"required---6402519\",\"value\":\"on\"},{\"name\":\"paragraph-text-label---6402519___required\",\"value\":\"Remarque éventuelle :\"}]
我通过分析表单中的每个输入进行搜索,但我仍然不知道为什么它记录了空数组。
如果项目等于 {},也许我可以找到一种方法来分隔/避免记录?
【问题讨论】:
-
演示:jsfiddle.net/ymdwgpLz - 我在日志中看不到任何空对象。顺便说一句,那些
{}是 objects 而不是 arrays -
附言。您的 HTML 有一些问题,例如具有相同“名称”属性的多个文本框...您可能需要一些时间来整理一下。
-
感谢 ADyson,您的 jsfiddle 帮助我看得更清楚。正如您所写的那样,在您的示例中它不是问题,它不可见,因为当我在这里编写代码时,我在不知情的情况下删除了导致问题的部分。这部分是我原始代码中的两个按钮。我编辑了我的问题以向他们展示。我不知道为什么,但我的 javascript 将每个按钮记录为空对象,所以我在我的 jquery 部分添加了另一个 not 条件,它工作正常。
-
啊,我明白了。您从这些按钮获得空对象的原因仅仅是因为它们没有“名称”或“值”属性,而这些是您的“项目”对象从输入中记录的唯一内容。如果它们在源元素上不存在,则不会在“项目”上创建新属性。
标签: javascript html arrays json forms