我正在处理动态多步骤表单。
我在做什么:
1.使用AJAX创建输入字段
2.从用户那里获取输入字段信息
3. serializeArray()
4.提交(POST):在提交之前,将输入值转换为所需的格式,例如:将输入type=date
转换为utc格式,就可以了。
我有多步格式,在第一步中,我有两个包含学生编号Id type=list
(用于创建数组)的字段,然后单击下一步按钮,然后我在第二步中有了Name,date ,地址。
我正在使用以下代码
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
和string中的值,我想在单击Submit时将string转换为数组。这就是我正在做的
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 });
对我不起作用。我想要
答案 0 :(得分:1)
首先,我不知道什么是HTML中的 输入类型=“列表” ,也许您有一个 输入列表< / em> ,在这种情况下,选择器应该只是 $('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(',') });
});
我希望这会有所帮助。
答案 1 :(得分:1)
我用开关盒解决了这个问题
var name = input.getAttribute('name');
var value;
var type = input.dataset.type;
switch (type) {
case "text":
value = input.value;
break;
case "list":
value = input.value.split(',');
break;
case "date":
value= input.value ? moment.utc(input.value).format('YYYY-MM-DDThh:mm:ss.SSSZ') : null;
break;
}
object[name] = value;