Здравствуйте! Есть такая форма(id='form'). Нужно извлечь значение input и select и составить массив(примерно: [{1, Главная}, {2, Новости}, ...]) после нажатия на кнопку. Как можно составить такой массив с помощью js?
Есть код, который может достать значение select:
$('.resolve-selected-user-id').click(function() {
let userId = $('.user-select option:selected').data('user-id');
console.log('Selected user #' + userId);
alert(userId);
});
А дальше не знаю как поступить. Вот html код:
while ($row = $menu->fetch_assoc()) { ?>
<input style="width: 30px" value="<?=
$row['position'] ?>">
<select class="user-select">
<option data-user-id="<?=$row['id']?>"><?= $row['name'] ?></option>
<?$calc++;
$q = getMenu($type_object);
while ($pow = $q->fetch_assoc()) {
if ($pow['name'] != $row['name']) {
?>
<option data-user-id="<?=$pow['id']?>"><?= $pow['name'] ?></option>
<?
}
}
?>
</select>
<span class="glyphicon glyphicon-minus-sign delPage"></span>
<br>
<? } ?>
Вам нужно для каждой пары input и select получить значения и записать их в заранее созданный массив.
Чтобы определить пары лучше input и select одной строки обернуть в <div>.
Но можно воспользоваться тем, что элементы соседние
var result = [];
$('#form input').each(function () {
result.push({
input: $(this).val(),
select: $('+ select', this).val()
})
})
Я бы делал как-то так. Добавил имена и значения для инпутов и селектов. И значения бы сохранил в value.
<?php
$num = 0;
while ($row = $menu->fetch_assoc()) { ?>
<input style="width: 30px" name="user_input_<?=$num?>" value="<?=$row['position'] ?>">
<select class="user-select" name="user_select_<?=$num?>">
<option data-user-id="<?=$row['id']?>" value="<?=$row['id']?>"><?= $row['name'] ?></option>
<?$calc++;
$q = getMenu($type_object);
while ($pow = $q->fetch_assoc()) {
if ($pow['name'] != $row['name']) {
?>
<option data-user-id="<?=$pow['id']?>" value="<?=$pow['id']?>"><?= $pow['name'] ?></option>
<?
}
}
?>
</select>
<span class="glyphicon glyphicon-minus-sign delPage"></span>
<br>
<?php
$num++;
}
?>
Сохранил максимальное значение номера
<script>
var max_num = <?=$num?>;
</script>
и пробежался по всем полям и собрал их в массив
$('.resolve-selected-user-id').click(function() {
var res = [];
for (var i = 0; i < max_num; i++) {
//let userId = $('.user-select option:selected').data('user-id');
//console.log('Selected user #' + userId);
//alert(userId);
var my_obj = {};
var inp_val = $('[name=user_input_'+i+']').val();
var sel_val = $('[name=user_select_'+i+']').val();
my_obj.inp_val = sel_val;
res.push(my_obj);
}
res; // то что надо
});
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости