在JavaScript中将JSON字符串转换为多步形式的数组?

时间:2018-10-08 15:20:24

标签: javascript jquery html

我正在处理动态多步骤表单。 我在做什么: 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 });对我不起作用。我想要enter image description here

2 个答案:

答案 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;