Добавление данных в массив
Добрый день.
Есть форма, вот ее основной блок, таких блоков несколько, различаются они только значением 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, время: 04:38. |