Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2016, 05:59
Интересующийся
Отправить личное сообщение для galiog Посмотреть профиль Найти все сообщения от galiog
 
Регистрация: 28.04.2016
Сообщений: 17

Определить выбраны ли radio
Здравстуйте. Столкнулся с такой проблемой:
У меня написан тест из нескольких вопросов. Отвечаешь на один, нажимаешь далее - попадаешь на следующий.
Пример вопросов:
<LI id="1">
<H4>1. Сколько человек будет жить в Вашем доме?</H4>
<input type=radio name='Q1' value="2">2<br/>
<input type=radio name='Q1' value="3">3<br/>
<input type=radio name='Q1' value="4">4<br/>
<input type=radio name='Q1' value="5">5<br/>
<input type=radio name='Q1' value="более 5">более 5<br/>
<input type="button" class="next" value = "Далее->">
</li>
<LI id="2" style="display:none;">
<H4>2. В Вашем доме должна быть детская комната? </H4>
<input type=radio name='Q2' value="да, одна"> да, одна<br/>
<input type=radio name='Q2' value="да, две"> да, две <br/>
<input type=radio name='Q2' value="нет"> нет <br/>
<input type="button" class="prev" value = "<-Назад">
<input type="button" class="next" value = "Далее->">
</li>

В скрипте работает все так:
var one = document.getElementById('1');
var two = document.getElementById('2');

var q1 = document.getElementsByName('Q1');
var q2 = document.getElementsByName('Q2');

var ell = [q1, q2]; //массив вопросов
var arr = [one, two]; // массив li
var a = 0;

$(".next").on("click", function(){
arr[a].style.display = "none";
arr[a+1].style.display = "block";
a++;
})

Надо чтобы по клику сперва проверялось выбран ли radio, и если да, то тогда уже перелистывался вопрос, иначе ошибка.

Попробовал проверять через ell[a].checked, но постоянно вылазит ошибка что элемент не выбран. Голову сломал уже, не могу понять в чем проблема.
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2016, 06:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

По умолчанию сделать выбранные первые в наборах и проверять ничего не надо. А уж если проверять, то:

if($(this).parent().find(':checked').length) ...


Зачем смесь из document.getElementById('1'); и JQ?

PS. Снимается вопрос об именах, нумерация разная, не заметил.

Последний раз редактировалось laimas, 16.12.2016 в 06:58.
Ответить с цитированием
  #3 (permalink)  
Старый 16.12.2016, 06:58
Интересующийся
Отправить личное сообщение для galiog Посмотреть профиль Найти все сообщения от galiog
 
Регистрация: 28.04.2016
Сообщений: 17

document.getElementById('1') - это id карточек, которые перелистываются на кнопку далее. На каждой карточке свой вопрос, имена radio в котором уже Q1 и т.д.
почему одинаковые имена? у первого вопроса имя Q1 у второго Q2. В конце теста все данные отправляю на почту, получая их в php через post, куда попадает value выбранного radio.
Ответить с цитированием
  #4 (permalink)  
Старый 16.12.2016, 07:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от galiog
document.getElementById('1') - это id карточек
Не важно что, у вас используется jQuery, вы код пишите так, что часть document.getElementById, затем из недр возникает JQ и $(".next").on("click")...

Ну так пишите сразу на чем-то

$('#1'), это и есть document.getElementById, только имена начинающиеся с цифры...

Вообще же, в JQ можно получить коллекции сразу, по любому селектору (тоже самое можно сделать и без JQ). Вот только совсем не нужны в данном случае эти коллекции для проверок, и делается все проще, как было показано.

А если первую кнопку в наборах сделать выбранной, то вообще проверки не требуется.
Ответить с цитированием
  #5 (permalink)  
Старый 16.12.2016, 07:06
Интересующийся
Отправить личное сообщение для galiog Посмотреть профиль Найти все сообщения от galiog
 
Регистрация: 28.04.2016
Сообщений: 17

По поводу Вашего ответа: да, он работает, спасибо!
Клиент не хочет чтобы какой-то вариант был выбран по умолчанию, по этому пришлось делать проверку.
$(this).parent().find(':checked').length - т.е. мы берем родителя кнопки нашей на которую нажимаем и ищем есть ли там выбранные элементы? Интересно. Еще раз спасибо за ответ!
Ответить с цитированием
  #6 (permalink)  
Старый 16.12.2016, 07:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от galiog
$(this).parent().find(':checked').length - т.е. мы берем родителя кнопки нашей на которую нажимаем и ищем есть ли там выбранные элементы?
Да, у родителя получаем коллекцию кнопок и выбираем в ней выбранную, только в JQ эта запись не содержит явного указания - массив элементов -> цикл -> найти. Поэтому и спрашивалось зачем смесь из document.getElementById и далее, если используется JQ.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить элемент под перетаскиваемым элементом slavaspirit Элементы интерфейса 3 26.07.2015 02:49
Изменить radio button через изображение Jeick9 Events/DOM/Window 1 10.03.2015 05:57
Отображение определенных элементов таблицы при нажатии на radio Kichiro Элементы интерфейса 2 04.12.2014 18:05
Проблема radio button с кроссбраузерностью shkarbatov Javascript под браузер 0 28.07.2011 10:55
выполнение ф-ии при изменении состояния radio MaxB Events/DOM/Window 5 24.06.2009 14:24