Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Записать все полученные значения в виде массива (help) (https://javascript.ru/forum/events/47488-zapisat-vse-poluchennye-znacheniya-v-vide-massiva-help.html)

Volchen0ck 26.05.2014 14:12

Записать все полученные значения в виде массива (help)
 
:help: :help: :help:

Есть HTML конструкция следующего вида
<div id="cn1" class="container cont container4">  
    <input id="slider1" type="range" class="slider slider1" min="0" max="5" value="1" step="1">
    <input id="slider2" type="range" class="slider slider2" min="0" max="5" value="1" step="1">
    <input id="slider3" type="range" class="slider slider3" min="0" max="5" value="1" step="1">
    <input id="slider4" type="range" class="slider slider4" min="0" max="5" value="1" step="1">
    <input id="slider5" type="range" class="slider slider5" min="0" max="5" value="1" step="1"
></div>


несколько контейнеров c id="cn"+i; где i, от 1 до 5.
В каждом контейнере по 5 слайдеров , id для слайдера = j, где j от 1 до 25;

т.е всего на странице 25 слайдеров.
Скрипт
for (i = 1; i < 25; i++) {
      slider = "#slider" + i;
         $(slider).each(function () {
                 bt = $(this).attr('id');
                 value=$(this).val();
                 save='{"slider":"'+bt+'", "value":"'+value+'"},';
}
//при изменении значения - записываем toSave
         $(slider).change(function () {
                 bt = $(this).attr('id');
                 value=$(this).val();
                 save='{"slider":"'+bt+'", "value":"'+value+'"},';
}


console.log (save) - выводит все значения слайдеров (все 25).

нужно сохранить все полученные save в виде массива:
function saveForm(){

         var toSave = '"slide10" : {';
                toSave += '"sliders":[';
                      for (var i=1,i<26;i++) {
                             toSave +=''+save+'';
                      }
                toSave+=']';
          return toSave+='}';
}


В toSave записывает 25 save, но дублирует последнее значение {"slider":"slider25", "value":"1"},

Как вывести все значения, а не дублировать последнее? :help:

....
"sliders":[
                   {
                        "slider":"slider1",
                        "value":"1"
                   },
                   { 
                         "slider":"slider2", 
                         "value":"1"
                    }...
           ]

WorM32 26.05.2014 14:19

for (i = 1; i < 25; i++) {
      slider = "#slider" + i;
         $(slider).change(function () {
                 bt = $(this).attr('id');
                 value=$(this).val();
                 save='{"slider":"'+bt+'", "value":"'+value+'"},';

здесь по факту i < 25 вешается на 24 слайдера.

а в следующем цикле
function saveForm(){

         var toSave = '"slide10" : {';
                toSave += '"sliders":[';
                      for (var i=1,i<26;i++) {
                             toSave +=''+save+'';
                      }
                toSave+=']';
          return toSave+='}';
}

уже 25 (i<26)

Volchen0ck 26.05.2014 15:01

Ок, for (i = 1; i < 26; i++) {...}
и
toSave += '"sliders":[';
                 for (var i=1; i<26; i++ ....


Результат тот же :-?


Часовой пояс GMT +3, время: 14:03.