简体   繁体   English

从表单输入创建多维关联数组

[英]Create multidimensional associative array from form inputs

What would be the best way to create a multidimensional associative array from form inputs? 从表单输入创建多维关联数组的最佳方法是什么?

The form looks like this: 表单如下所示:

<div id="items">
    <h4>Engraving Text</h4>
    <div class="item" data-position="1">
        <h4 id="engraving-item">Item 1</h4>
        <label>Engraving Line 1: </label>
        <input type="text" class="engraving-input engraving-line1" name="trophy" id="item1-line1">
        <br />
        <label>Engraving Line 2: </label>
        <input type="text" class="engraving-input engraving-line2" name="trophy" id="item1-line2">
        <br />
        <label>Engraving Line 3: </label>
        <input type="text" class="engraving-input engraving-line3" name="trophy" id="item1-line3">
        <br />
    </div>
</div>

If the user enters that they want multiple items - additional inputs are dynamically added to the form using these first 3 as a template. 如果用户输入他们想要多个项目 - 使用前3个作为模板动态地将其他输入添加到表单。

I'm looking to create this sort of array (for example if the user added 2 items): 我正在寻找创建这种类型的数组(例如,如果用户添加了2个项目):

var myArray =   {
            item1 :
                [
                    {
                        engraving-line1 : "user entered data",
                        engraving-line2 : "more user data",
                        engraving-line3 : "yep, more data"
                    }
                ],
            item2 :
                [
                    {
                        engraving-line1 : "user entered data",
                        engraving-line2 : "more user data",
                        engraving-line3 : "yep, more data"
                    }
                ]
          };

I had written this but I think I am headed in the wrong direction with it or at the very least - writing it poorly. 我曾经写过这篇文章,但我认为我会朝着错误的方向前进,或者至少 - 写得不好。

var totalItems = $("#quantity_wanted").val();

jsonObj = [];

i=1;

while (i < totalItems){
items = {};
$('.item[data-position="'+i+'"] :input').each(function(){
    var name = $(this).attr("name");
    var engraving = $(this).val();
    item = {}
    item ["name"] = name;
    item ["engraving"] = engraving;
    items.push(item);       
});

jsonObj.push(items) 
i++;    
}

Just looking for help writing the javascript that will help me to iterate through the inputs on the screen and push them into a multidimentional associative array like the one I listed. 只是寻找帮助编写javascript的帮助,这将帮助我遍历屏幕上的输入并将它们推送到像我列出的那样的多维关联数组。

Your code could be much simplified. 您的代码可以大大简化。

  1. data-position attribute in jquery selector doesn't make sense since you don't actually use its value. jquery选择器中的data-position属性没有意义,因为您实际上没有使用它的值。 You just need to select all input group containers by their shared class ( .item ), then, for each container, select all descendant inputs. 您只需按共享类( .item )选择所有输入组容器,然后为每个容器选择所有后代输入。
  2. Your code building item element is redundant. 您的代码构建item元素是多余的。 You can use inline object literal/initializer ( {...} ) instead. 您可以使用内联对象文字/初始值设定项( {...} )。

Furthermore, as @Andy noted, items array should be initialized by array literal ( [] ), not object ( {} ). 此外,正如@Andy所指出的, items数组应该由数组文字( [] )初始化,而不是对象( {} )。

So the code should look like this: 所以代码应如下所示:

var jsonObj = [];
$('div.item').each(function(){
    var items = [];
    $(this).find('input').each(function() {
        items.push({
            name: $(this).attr("name"), engraving: $(this).val()
        });       
    });
    jsonObj.push(items) 
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM