使用动态表单 jquery 创建多维数组

Create multidimentional array with dynamic form jquery

本文关键字:数组 创建 jquery 动态 表单      更新时间:2023-09-26

我有以下形式,如果用户单击链接以添加更多项目,我将动态添加更多下拉列表(与这些完全相同(

<div class="dynamic-sale">
      <select name="sizes[]" id="sizes" class="entry-dropdown">
        <option value="3XL">3XL</option>
        <option value="2XL">2XL</option>
        <option value="XL">XL</option>
        <option value="L">L</option>
        <option value="M">M</option>
        <option value="YL">YL</option>
        <option value="YM">YM</option>
      </select> 
   <select name="number[]" id="amount" class="entry-dropdown">
        <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>
   </select>
   <select name="price[]" id="price" class="entry-dropdown">
        <option value="15">$15</option>
        <option value="12.5">$12.5</option>
        <option value="10">$10</option>
        <option value="0">Free</option>
   </select>
 </div>

我的问题是,我想把结果放在一种可以把所有东西加起来的格式上

所以它会说我有多少个尺寸,每个尺寸有多少个,以及价格。我假设我需要一个多维阵列。

我目前有:

 $('#order-submit').click(function(){
var size = [];
var price = [];
var quantity = []; 
$.each($('.entry-dropdown'), function() {
    size.push($(this).val());

});
  console.log(size);

但这一切给我的都是一个数组:["XL"、"3"、"15"、"3XL"、"1"、"15"](当我测试它时(

可用格式获取数据的最佳方法是什么?

我希望这是有道理的!谢谢

您必须遍历每个dynamic-sale元素。然后,遍历子项,并将值添加到子数组中。

var result = [];                               // <-- Main array
$(".dynamic-sale").each(function(){
    var individual_result = [];                // <-- "sub"-array
    $(this).find("select").each(function(){
        individual_result.push($(this).val());
    })
    result.push(individual_result);            // <-- Add "sub" array to results
});
此方法返回一个数组,该数组

由一个带有 size, price and quantity 的数组组成。

如果要将这些值放在单独的数组中,请使用:

var size = [],
    price = [],
    quantity = [];
$(".dynamic-sale").each(function(){
    var selects = $(this).find("select");
    size.push(selects.eq(0).val());
    price.push(selects.eq(1).val());
    quantity.push(selects.eq(2).val());
});

它有点不同,但像这样的东西可能是一个想法:

var data = [];
$("#order-submit").click(function () {
    $(".dynamic-sale").each(function () {
        var $saleDiv = $(this);
        data.push({
            size: $saleDiv.children(".size-dropdown").val(),
            amount: window.parseInt($saleDiv.children(".amount-dropdown").val(), 10),
            price: window.parseFloat($saleDiv.children(".price-dropdown").val())
        });    
    });
});

然后,您最终会得到一个 Object s 的Array,每个 s 代表表中的一行,如下所示:

[
    {size: "3XL", amount: 1, price: 0},
    {size: "M", amount: 7, price: 12.5}
    ...
]