У меня есть несколько флажков в представлении, и у каждого из них есть некоторые атрибуты данных, например:
Как только кнопка нажата, я повторяю все флажки, которые выбраны, и что я хочу сделать, это получить поля данных и цены для каждого выбранного флажка и создать массив 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
Вы можете использовать $.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')?
Что касается вашего кода, у вас был только один ответ, потому что вы переписывали результат каждый раз, когда вы вводили свой цикл (ы). В противном случае все было в порядке (кроме форматирования, но мы не уверены, какой формат вы точно хотите). Не могли бы вы привести пример результата, который вы хотели бы иметь?
если вы хотите получить объект со всеми отмеченными значениями, пропустите 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();
конечно, я пропустил что-то очевидное здесь... но ум в другом месте
Это должно дать массив со значениями (целыми числами) и ценами (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)
действительно не предназначалось для отмеченного флажка. Теперь он должен быть нацелен на флажок.