Добавление данных в массив
Добрый день.
Есть форма, вот ее основной блок, таких блоков несколько, различаются они только значением input с классом osnova (Программа 1, программа 2 и т.д.) <div class="progblock"> <label class="bold_name"><input type="checkbox" name="public" class="public osnova" value="Программа 1" > Программа 1</label> <div class="napravlenie hides" style="display:none;"> <div class="checkbox col-xs-6 forma_obuchen"> <select name="ot_forma1" class="form-control"> <option value="">Форма обучения</option> <option value="Очная">Очная</option> <option value="Дистанционная">Дистанционная</option> </select> </div> <div class="checkbox col-xs-6 kolvo_uchenik"> <input type="number" name="ot_kolvo1" value="" class="form-control" placeholder="Число слушателей"> </div> </div> <div class="clearfix"></div> </div> <a href="#" class="podtv">Заполнить форму</a> Снизу есть ссылка - Заполнить форму - по нажатию которой мне нужно собрать все выбранные пользователем checkbox (их значения) и значения, выбранные в соответствующих полях под этим чекбоксом (форма обучения и число слушателей). Данные выбранных чекбокосов я забиваю в массив таким методом: var arr=$('input:checkbox:checked').map(function() {return this.value;}).get(); А вот как мне в массив добавить остальные данные? Получается мне нужно создать многомерный массив, где будут данные: array { [0] = Array { [0] = Программа 1 [1] = Дистанционная [2] = 5 } [1] = Array { [0] = Программа 1 [1] = Очная [2] = 10 } ... } |
Цитата:
var arr=[ { name: 'Программа 1', type: 'Дистанционная', val: 5 }, { name: 'Программа 1', type: 'Очная', val: 10 } ] |
Цитата:
|
Batyabest,
var arr=$.map($('input:checkbox:checked'),function(el) { var parent = $(el).parents('.progblock'); return [el.value, $('select',parent).val(), $('[type="number"]',parent).val()]}); |
Цитата:
|
Цитата:
Я сейчас попытаюсь объяснить что мне в итоге нуджно, а Вы подскажите, как легче сделать. Эти данные в дальнейшем отправляются в модальное окно в котором есть форма (имя, телефон и т.д.) А значения полей просто снизу выводится списком должны: Наименование: Программа 1 Форма обучения: Дистанционная Количество: 5 человек Наименование: Программа 2 Форма обучения: Очная Количество: 17 человек Далее человек заполнив форму жмет "Отправить" и уходит на почту уже и данные формы и данные выбранных на первом этапе полей. |
Batyabest,
var arr= [].map.call($('input:checkbox:checked'),function(el) { var parent = $(el).parents('.progblock'); return {'Наименование' : el.value, 'Форма обучения' : $('select',parent).val(), 'Количество' : $('[type="number"]',parent).val()}}); alert(JSON.stringify(arr, null, 4)) |
Цитата:
А как мне ее разобрать чтобы вывести в модальном окне? Свой массив одномерный я так разбирал: for (var index in arr) { for (var mass in index ) $('.proverka_programm').append('<li>' + arr[mass] + '</li>'); $("#myModal").show("slow"); } А тут как быть? JSON.parse() возвращает массив из объектов, как быть далее? |
Цитата:
Как мне подвязать валидацию полей, которые вложены в чекбоксы? Пытаюсь так подвязаться, но он выдет сообщение об ошибке, но функция продолжает далее работать. В результате я в модельном окне вижу только те данные, которые заполнены правильно. А как вообще прервать выполнение скрипта и не показывать модалку? var arr= [].map.call($('input:checkbox:checked'),function(el) { var parent = $(el).parents('.progblock'); if ($('select',parent).val() == '') { alert('Выберите форму обучения!'); return; } else if ($('[type="number"]',parent).val() == '') { alert('Введите количество слушателей!'); return; } else { return { 'name' : el.value, 'type' : $('select',parent).val(), 'val' : $('[type="number"]',parent).val() } } }); |
Часовой пояс GMT +3, время: 05:05. |