Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2020, 19:46
Новичок на форуме
Отправить личное сообщение для busik Посмотреть профиль Найти все сообщения от busik
 
Регистрация: 06.05.2020
Сообщений: 3

Как можно получить значения чек-боксов в одну строку
Добрый день, уважаемые форумчане.
Есть просьба помочь:

Форма:
<form>
<div class="question">
Вопрос 1
<input type="radio" name="q1" value="Вариант 1">
<input type="radio" name="q1" value="Вариант 2">
<input type="radio" name="q1" value="Вариант 3">
</div>

<div class="question">
Вопрос 2
<input type="checkbox" name="q2" value="Вариант 1">
<input type="checkbox" name="q2" value="Вариант 2">
<input type="checkbox" name="q2" value="Вариант 3">
<input type="checkbox" name="q2" value="Вариант 4">
</div>

</form>


var form = $(form).serializeArray();


В консоли вижу:
{name: "q1", value: "Вариант 1"}
{name: "q2", value: "Вариант 3"}
{name: "q2", value: "Вариант 4"}


Вопрос: как можно получить результаты для чекбокса в "одну строчку", вот так:

{name: "q1", value: "Вариант 1"}
{name: "q2", value: "Вариант 3, Вариант 4"}
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2020, 20:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

busik,
проверку на checked, попробуйте добавить сами.
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<form>
<div class="question">
Вопрос 1
<input type="radio" name="q1" value="Вариант 1" checked="checked">
<input type="radio" name="q1" value="Вариант 2">
<input type="radio" name="q1" value="Вариант 3">
</div>

<div class="question">
Вопрос 2
<input type="checkbox" name="q2" value="Вариант 1">
<input type="checkbox" name="q2" value="Вариант 2">
<input type="checkbox" name="q2" value="Вариант 3" checked="checked">
<input type="checkbox" name="q2" value="Вариант 4" checked="checked">
</div>
 <script>
const data = Array.from(document.querySelectorAll('.question'), div => {
const checked = div.querySelectorAll(':checked');
return {name: checked[0].name , value: Array.from(checked, ({value}) => value).join(',')}
})
document.write(JSON.stringify(data, "", 4))
  </script>
</form>

</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2020, 20:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

busik, а цель иметь в одну строку, ради просмотра в консоли?
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2020, 20:21
Новичок на форуме
Отправить личное сообщение для busik Посмотреть профиль Найти все сообщения от busik
 
Регистрация: 06.05.2020
Сообщений: 3

Сообщение от laimas Посмотреть сообщение
busik, а цель иметь в одну строку, ради просмотра в консоли?
пример про консоль я навел для наглядности. Возможно не совсем удачно)

Задача стоит в необходимости получить массив:

Вопрос 1 - ответ1
Вопрос 2 - ответ 3, ответ 4

а у меня пока получается только вида:

Вопрос 1 - ответ1
Вопрос 2 - ответ 3
Вопрос 2 - ответ 4
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2020, 20:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А чем не подходит структура, которую вы наблюдаете после serializeArray(), это ведь массив и есть, объектов.

PS. Одно и тоже имя радио кнопки, это необходимость, а вот у флажков одно и тоже имя уже баг.

Последний раз редактировалось laimas, 06.05.2020 в 20:30.
Ответить с цитированием
  #6 (permalink)  
Старый 07.05.2020, 22:12
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

ну в одну строчку, значит в одну строчку

console.log('Вопрос 2:',[...document.querySelectorAll('input[type=checkbox]')].filter(item=>item.checked===true).map((item)=>item.value).join(', '))


для "Вопрос 1" сами

похожую задачка решают здесь на 12:20, дальше filter, map...

https://www.youtube.com/watch?v=SGeQ...zOzWT&index=15

рекомендую подписаться и посмотреть весь плейлист
Ответить с цитированием
  #7 (permalink)  
Старый 07.05.2020, 22:18
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

детально
получаем элементы, общий параметр у них type (или по name можно было, если смотреть на пример, но...)
document.querySelectorAll('input[type=checkbox]

разворачивает и заносим в массив
[...document.querySelectorAll('input[type=checkbox]')]

отбираем по условия, а именно то что выбнали мы
[......].filter(item=>item.checked===true)

преобразуем к читабельному виду
[......].filter(item=>item.checked===true).map((item)=>item.value)

вытаскиваем из массива и записываем в строку
[......].filter(item=>item.checked===true).map((item)=>item.value).join(', ')

Последний раз редактировалось od0201, 07.05.2020 в 22:20.
Ответить с цитированием
  #8 (permalink)  
Старый 08.05.2020, 00:22
Новичок на форуме
Отправить личное сообщение для busik Посмотреть профиль Найти все сообщения от busik
 
Регистрация: 06.05.2020
Сообщений: 3

Сообщение от od0201 Посмотреть сообщение
детально
получаем элементы, общий параметр у них type (или по name можно было, если смотреть на пример, но...)
document.querySelectorAll('input[type=checkbox]

разворачивает и заносим в массив
[...document.querySelectorAll('input[type=checkbox]')]

отбираем по условия, а именно то что выбнали мы
[......].filter(item=>item.checked===true)

преобразуем к читабельному виду
[......].filter(item=>item.checked===true).map((item)=>item.value)

вытаскиваем из массива и записываем в строку
[......].filter(item=>item.checked===true).map((item)=>item.value).join(', ')
Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно передать значения из Javabeans в JS stavatar@yandex.ru Общие вопросы Javascript 0 10.12.2019 21:46
Как заставить пустой тег <p> быть высотой в одну строку? xintrea (X)HTML/CSS 6 01.10.2012 09:38
Как соединить 2 div в одну строку или в один? vadim90k (X)HTML/CSS 3 03.09.2012 19:11
Как можно совместить 2 "одинаковые javascript но разные внутри" в одну страницу?..ато rashid86 Элементы интерфейса 2 25.04.2011 22:49
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57