2011-12-16 3 views
1

У меня есть следующие формы, и я динамически добавлять больше выпадающие (точно так же, как это), если пользователь нажимает на ссылку, чтобы добавить больше деталейСоздать многомерный массив с динамической формы JQuery

<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"] (когда я его протестировал)

Что было бы лучшим способом получить эти данные в пригодном для использования формате?

Я надеюсь, что это имеет смысл! Спасибо

ответ

1

Вам необходимо пройти через каждый элемент 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()); 
}); 
+0

Вот что я искал. Теперь это имеет большой смысл. Благодаря! – Bill

1

Это немного разные, но что-то подобное может быть идея:

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()) 
     });  
    }); 
}); 

Вы бы тогда в конечном итоге с Array от Object s, каждая из которых представляет собой строку в вашем столе, что-то вроде:

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