将表单数据存储在数组中?

时间:2013-05-05 00:59:48

标签: javascript jquery arrays json

需要帮助将表单数据存储在数组中。

表单可以选择显示其他字段。如何获取要在数据数组中显示的其他字段值。

<form id="myForm">
    <div id="input1" style="margin-bottom:4px;" class="clonedInput">

        <p>Please Enter Your First Name Last Name</p>
        <div style="border:1px solid black;padding:5px">
            <label for="first1">first:</label>
            <input type="text" name="first1" id="first1" /><br />

            <label for="last1">last:</label>
            <input type="text" name="last1" id="last1" /><br />
        </div>

        <p>Please Enter Your Address</p>
        <div style="border:1px solid black;padding:5px">    
            <label for="add1">address:</label>
            <input type="text" name="add1" id="add1" /><br />

            <select class="period" id="hour1" name="hour1">                                         
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
                <option value="11">11</option>
                <option value="12" selected>12</option>
            </select>
        </div>
    </div>

    <div>
        <input type="button" id="btnAdd" value="add another name" />
    </div>

    <div style="padding-top:30px">
        <input type="button" id="submit" value="submit to Object" />
    </div>
</form>

var storeData = {          
    "firstname": "",
    "lastname": "",           
    "address": "",
    "hour": ""
};

$('#btnAdd').click(function() {
   var num = $('.clonedInput').length;
   var newNum  = new Number(num + 1);

   var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);        
   newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);

   $('#input' + num).after(newElem);

    });

$('#submit').click(function() {

    var firstname =  $('#first1').val();
    var lastname =  $('#last1').val();
    var address =  $('#add1').val(); 
    var hour =  $('#hour1').val();

    storeData.firstname = firstname;
    storeData.lastname = lastname;
    storeData.address = address;
    storeData.hour = hour;    

    console.log(storeData);
});

这是我的工作示例。

http://jsfiddle.net/FFueC/8/

请注意,第一个字段值是在数据数组中设置的,但是当您添加其他字段时,它们不是。

3 个答案:

答案 0 :(得分:1)

您可以使用.serializeArray()创建一个包含所有表单输入的对象:

$('#submit').click(function() {
    var data = $('#myForm').serializeArray();
    for(i in data){
        console.log(data[i]);
    }  
});

jsfiddle

答案 1 :(得分:0)

检查新添加的元素。它们都有相同的名字;我认为你的克隆人没有像预期的那样工作。您必须遍历克隆DIV中的每个输入并更新名称。

Example

$('#btnAdd').click(function() {
   var num = $('.clonedInput').length;
   var newNum  = new Number(num + 1);

   var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);        
    newElem.find('input').each(function() {
        $(this).attr('id', 'name' + newNum).attr('name', 'name' + newNum);
    });

   $('#input' + num).after(newElem);

    });

不要忘记更新标签的for属性。

答案 2 :(得分:-1)

使用

var formData = $('#myForm').searialize();