16.11.2016, 12:51
|
Профессор
|
|
Регистрация: 14.09.2013
Сообщений: 252
|
|
Добавление данных в массив
Добрый день.
Есть форма, вот ее основной блок, таких блоков несколько, различаются они только значением 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
}
...
}
|
|
16.11.2016, 13:22
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Batyabest
|
Получается мне нужно создать многомерный массив
|
Можно сделать массив объектов...
var arr=[
{
name: 'Программа 1',
type: 'Дистанционная',
val: 5
},
{
name: 'Программа 1',
type: 'Очная',
val: 10
}
]
|
|
16.11.2016, 13:31
|
Профессор
|
|
Регистрация: 14.09.2013
Сообщений: 252
|
|
Сообщение от ksa
|
Можно сделать массив объектов...
var arr=[
{
name: 'Программа 1',
type: 'Дистанционная',
val: 5
},
{
name: 'Программа 1',
type: 'Очная',
val: 10
}
]
|
А как мне вместо значения добавлять туда только те значения Программ, чекбоксы которых отмечены? То есть выбрал пользователь программу 1, выбрал форму обучения Дистанционную, количество слушателей выбрал 5 - вот я это вижу в массиве.
|
|
16.11.2016, 13:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Batyabest,
var arr=$.map($('input:checkbox:checked'),function(el) {
var parent = $(el).parents('.progblock');
return [el.value, $('select',parent).val(), $('[type="number"]',parent).val()]});
|
|
16.11.2016, 13:37
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Batyabest
|
А как мне вместо значения добавлять туда только те значения Программ, чекбоксы которых отмечены?
|
Читай нужные данные... Проверяй... Формируй массив...
|
|
16.11.2016, 13:52
|
Профессор
|
|
Регистрация: 14.09.2013
Сообщений: 252
|
|
Сообщение от рони
|
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 человек
Далее человек заполнив форму жмет "Отправить" и уходит на почту уже и данные формы и данные выбранных на первом этапе полей.
|
|
16.11.2016, 14:06
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
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))
|
|
16.11.2016, 14:25
|
Профессор
|
|
Регистрация: 14.09.2013
Сообщений: 252
|
|
Сообщение от рони
|
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))
|
Сейчас то что нужно. Получилась JSON строка?
А как мне ее разобрать чтобы вывести в модальном окне?
Свой массив одномерный я так разбирал:
for (var index in arr) {
for (var mass in index )
$('.proverka_programm').append('<li>' + arr[mass] + '</li>');
$("#myModal").show("slow");
}
А тут как быть?
JSON.parse() возвращает массив из объектов, как быть далее?
|
|
25.11.2016, 12:10
|
Профессор
|
|
Регистрация: 14.09.2013
Сообщений: 252
|
|
Сообщение от рони
|
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))
|
Рони, помоги)))
Как мне подвязать валидацию полей, которые вложены в чекбоксы?
Пытаюсь так подвязаться, но он выдет сообщение об ошибке, но функция продолжает далее работать. В результате я в модельном окне вижу только те данные, которые заполнены правильно. А как вообще прервать выполнение скрипта и не показывать модалку?
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()
}
}
});
|
|
|
|