2011-06-22 6 views

ответ

6

В общем, не используют JS массивы «ассоциативные массивы». Используйте простые объекты:

var array_products = {}; 

Вот почему $.each не работает: JQuery признает, что вы передаете массив и итерация только более численные свойства. Все остальные будут проигнорированы.

В массиве должны быть только записи с числовыми ключами. Вы можете назначить строковые ключи, но многие функции не учитывают их.


Лучше:

Как вы используете JQuery, вы можете использовать jQuery.param[docs] для сериализации. Вам просто нужно построить правильный входной массив:

var array_products = []; // now we need an array again 
$('.check_product:checked').each(function(i, obj) { 
    // index and value 
    var num = $(obj).next().val(); 
    var label = $(obj).next().next().attr('data-label'); 
    // build array 
    if((num > 0) && (typeof num !== undefined)) { 
     array_products.push({name: label, value: num}); 
    }  
}); 

var serialized_products = $.param(array_products); 

Не нужно реализовывать собственную функцию кодирования URI.

DEMO


Лучшие:

Если вы даете поля ввода надлежащего name:

<input name="sky_blue" class="percent_product" type="text" value="20" /> 

вы можете даже использовать .serialize()[docs] и значительно уменьшить количество код (я использую next adjacent selector [docs]):

var serialized_products = $('.check_product:checked + input').serialize(); 

(оно будет содержать 0 значений, хотя).

DEMO

+0

Большое спасибо! –

2

JSON.stringify(object)

Как заметка на полях нет ассоциативных массивов есть только объекты.

Использование json-js для поддержки старых браузеров, таких как IE6 и IE7

+0

Не JSON.stringify доступен только для более современных браузеров? Если вы не указали ссылку на скрипт на [json2.js] (https://github.com/douglascrockford/JSON-js)? –

+0

@AshClarke зависит от вашего определения современных браузеров. Он поддерживается всеми текущими и недавними браузерами.Если вам нужна поддержка _legacy_, используйте json2 (я уже добавил ссылку) – Raynos

+0

@Raynos не будет 'let arr = []; a ['foo'] = 'bar'; JSON.stringify (a); 'stringify it to '[]' – ShrekOverflow

5

Вы можете сериализация его с JSON library (или родной JSON object если таковые имеются).

var serialised = JSON.stringify(obj); 
Смежные вопросы