我正在研究动态多步骤表单。
我在做什么:
1.使用AJAX创建输入框
2.获取用户输入字段信息
3.序列化数组()
4.提交(POST):提交之前将输入值转换为所需的格式例如:输入type=date
转换为utc格式,工作正常。
我有多步骤格式,在第一步中,我有两个字段,其中包含学号、ID type=list
(用于创建数组),然后单击下一步按钮,然后我有第二步表单其中有姓名、日期、地址。
我正在使用以下代码转换提交日期
var dateTypeField = $('form').find('input[type="date"]').attr('name');
var dateField = $('form').find('input[type="date"]').val();
var dateFormat = '';
if (dateField) {
dateFormat = moment.utc(dateField).format('YYYY-MM-DDThh:mm:ss.SSSZ');
}
else {
dateFormat = null;
}
工作正常。
问题:我在第一步中有两个输入字段,其中有 type=list
和字符串中的值,我想在单击提交时将字符串转换为数组.这就是我在做的
var listTypeField = $('form').find('input[type="list"]').attr('name');
var inputTypeList = $('form').find('input[type="list"]').val();
listTypeField = inputTypeList.split(',');
var listFormat = inputTypeList.split(',');
var formData = $form.serializeArray();
formData.push({ name: dateTypeField, value: dateFormat });
formData.push({ name: listTypeField, value: inputTypeList });
问题:1. 我有两个字段 type= list ,但只显示一个字段使用 $('form').find('input[type="list"]').attr('name')
2. 溢出未定义。 3. serializeArray()后如何将字符串转成数组? formData.push({ name: listTypeField, value: inputTypeList });
不适合我。我要
最佳答案
首先我不知道 HTML 中的input type="list" 是什么,也许您有一个输入列表,在这种情况下,选择器应该只是 $('input[list]')。
其次,如果您有多个相同类型的输入(例如,[type="radio"]),您的方法将始终从最后一个输入中提取名称:
<input type="radio" name="radio2" value="34" />
<input type="radio" name="radio7" value="45" />
// .......
console.log($('input[type="radio"]).length); /// 2
console.log($('input[type="radio"]).attr('name'); /// "radio7" --> Always the name from last element!
您必须列出所有输入[type="whatever"] 并在每个实例上执行您的代码,如下所示:
$('form').find('input[type="list"]').each(function() {
/// This block will be executed on every instance
var listTypeField = $(this).attr('name'); /// "this" is the current instance
var inputTypeList = $(this).val();
formData.push({ name: dateTypeField, value: inputTypeList.split(',') });
});
希望对您有所帮助。
关于javascript - 在 JavaScript 中将 JSON 字符串转换为多步形式的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52705418/