Я испытываю то, что, по моему мнению, является логической проблемой в моем коде jQuery. Я создаю массив объектов, которые должны быть JSON.stringify'd и помещены в localStorage. Формат выглядит так:jQuery Mobile - невозможно правильно обновить массив объектов
arr = [{"name": "Some Name", "number": "1"}, {"name": "Another Name", "number": "52"} , и т. д.
На странице есть переменное количество ползунков, каждый слайдер соответствует «имени». Значение слайдера соответствует «числу». Когда слайдер обновляется, он должен обновить соответствующее «имя» обновленным номером.
У меня возникли проблемы с тем, чтобы это работало. Я могу заставить его сделать одно из двух: добавлять новый объект в массив каждый раз, когда движется ползунок. Результат: [{"name": "Some Name", "number": "1"}, {"name": "Some Name", "number": "2"}, {"name": "Some Name "," number ":" 3 "}]
ИЛИ, если я изменю вещи, я могу заставить его заменить только число и оставить имя ... пока не будет перемещен другой слайдер, после чего он стирает существующий объект и заменяет его новым объектом с использованием нового имени.
Что я хочу, так это иметь один объект в массиве для каждого слайдера. Поскольку число ползунков будет меняться в зависимости от определенных параметров, я не могу жестко закодировать идентификаторы.
Прошу прощения, если это звучит сложно.
Вот мой код:
$(document).on("change", ".init_slider", function() {
init_val = $(this).val();
char_name = $(this).parent().prev().prev().html();
init_char_object.name = char_name;
init_char_object.initroll = init_val;
// If the array is empty, push the object into the array
if (init_array.length === 0) {
init_array.push(init_char_object);
} else {
// Check the array for the current name. If it's already there, just replace the number.
// If it's not there, push the new object into the array.
$.each(init_array, function(i) {
if(init_array[i].name === char_name) {
init_array[i].initroll = init_val; // new add
return false;
} else {
init_array.push(init_char_object);
}
});
// Update localStorage with the array.
localStorage.setItem("_init_data", JSON.stringify(init_array));
}
});
});
Извините еще раз, если это сбивает с толку. У меня такое чувство, что я делаю это намного сложнее, чем это должно быть ...
Спасибо!
Вау, большое вам спасибо! Я реализовал ваше решение, и он отлично работает. Именно то, что я искал. Я знал, что я рядом! ;-) – mrbranden
Добро пожаловать. – ezanker