получить атрибуты управления с помощью jquery и создать json

0

У меня есть несколько флажков в представлении, и у каждого из них есть некоторые атрибуты данных, например:

Изображение 174551

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

Это то, что у меня есть до сих пор:

var boxes2 = $("#modifiersDiv :checkbox:checked");
            var selectedModifiers = [];
            var modifierProperties = [];
            for (var i = 0; i < boxes2.length; i++) {

                for (var k = 0; k < boxes2[i].attributes.length; k++) {
                    var attrib = boxes2[i].attributes[k];
                    if (attrib.specified == true) {
                        if (attrib.name == 'value') {
                            modifierProperties[i] = attrib.value;
                            selectedModifiers[k] = modifierProperties[i];
                        }
                        if (attrib.name == 'data-price') {
                            modifierProperties[i] = attrib.value;
                            selectedModifiers[k] = modifierProperties[i];
                        }                 
                    }                    
                }
            }
            var jsonValueCol = JSON.stringify(selectedModifiers);

Я не могу получить значения для каждого флажка, и я могу получить значения только для первого и, кроме того, не в правильном формате, это то, что я получаю как JSON:

[null,"67739",null,"1"]

Любые советы, как я могу получить правильные данные?

Заранее спасибо, Laziale

  • 0
    Несколько хороших ответов появились, когда я настраивал вашу исходную проблему в jsfiddle на jsfiddle.net/Zp3gP. Вы можете использовать ее для проверки их кода.
Теги:
checkbox

3 ответа

1
Лучший ответ

Вы можете использовать $.each для анализа массива jquery, например:

var jsonValueObj = [];
$("#modifiersDiv :checkbox:checked").each(function(){
  jsonValueObj.push({'value':$(this).val(),'data-price':$(this).attr('data-price')});
});
jsonValueCol = JSON.stringify(jsonValueObj);

Обратите внимание, что лучше использовать val(), чем attr ('value'). Дополнительная информация об этом в таких потоках, как: В чем разница между jQuery.val() и.attr('value')?

Что касается вашего кода, у вас был только один ответ, потому что вы переписывали результат каждый раз, когда вы вводили свой цикл (ы). В противном случае все было в порядке (кроме форматирования, но мы не уверены, какой формат вы точно хотите). Не могли бы вы привести пример результата, который вы хотели бы иметь?

  • 0
    Спасибо, ваше решение помогло мне. И спасибо всем за вашу помощь
1

если вы хотите получить объект со всеми отмеченными значениями, пропустите JSON (который является всего лишь массивом объектов) и создайте свой собственный...

var checked =[];
var getValues = function(){
  $('.modifiers').each(function(post){
    if($(this).prop('checked')){
      checked.push({'data-price':$(this).attr('data-price'),'value':$(this).attr('value')});
    }
  });
}

getValues();

конечно, я пропустил что-то очевидное здесь... но ум в другом месте

  • 0
    ошибка: $ (...). forEach не является функцией
  • 0
    извини, я имел ввиду .each ()
0

Это должно дать массив со значениями (целыми числами) и ценами (float):

var selected = [];

$("#modifiersDiv :checkbox:checked").each(function()
{
    var val = parseInt($(this).val(), 10);
    var price = parseFloat($(this).data("price"));    
    selected.push(val);
    selected.push(price);
});

Изменение: обновленный ответ после комментария Laziale. Значение $(this) действительно не предназначалось для отмеченного флажка. Теперь он должен быть нацелен на флажок.

  • 1
    $ (this) .val () не является хорошим селектором, потому что он запускает свойства кнопки, которая запускает функцию jquery. @ZiNNED
  • 0
    @Laziale Вы правы. Я обновил ответ, чтобы отразить изменения, необходимые для его работы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню