#javascript #html #forms
#javascript #HTML #формы
Вопрос:
Я пытаюсь создать действительно простой тест с переключателями с помощью javascript и HTML-формы. Когда я пытаюсь взять значения вопроса формы и поместить их в переменные, они не принимаются. Когда я console.log q1, я просто получаю undefined.
Я пытался присвоить переключателям идентификаторы с помощью getElementById, не работает. Я также пробовал document.forms[‘infoForm’][‘question1’].value;
function results() {
event.preventDefault();
var q1 = document.getElementsByName('question1').value;
var q2 = document.getElementsByName('question2').value;
var q3 = document.getElementsByName('question3').value;
var q4 = document.getElementsByName('question4').value;
console.log(q1);
}
<form name="infoForm" id="infoForm" onsubmit="return results();" method="post">
<fieldset>
<legend>Here's a Quiz!</legend>
<div class="question">
quiz question 1<br>
<input type="radio" name="question1" value="W">W<br>
<input type="radio" name="question1" value="R1">R<br>
<input type="radio" name="question1" value="W">W<br>
</div>
<div class="question">
quiz question 2<br>
<input type="radio" name="question2" value="R2">R<br>
<input type="radio" name="question2" value="W">W<br>
<input type="radio" name="question2" value="W">W<br>
</div>
<div class="question">
quiz question 3<br>
<input type="radio" name="question3" value="W">W<br>
<input type="radio" name="question3" value="R3">R<br>
<input type="radio" name="question3" value="W">W<br>
</div>
<div class="question">
quiz question 4<br>
<input type="radio" name="question4" value="W">W<br>
<input type="radio" name="question4" value="W">W<br>
<input type="radio" name="question4" value="R4">R<br>
</div>
<input type="submit" value="Submit">
</fieldset>
</form>
При использовании console.log() для переменных вопроса я хотел бы видеть значение, которое фактически выбрал пользователь, вместо undefined .
Комментарии:
1.
q1
не имеетvalue
свойства. Как и любая другая коллекция.2.
getElements
возвращает, ну, элементы , а не один элемент …getElementById
было бы лучшим выбором и должно работать так, как ожидалось, не могли бы вы показать нам эту попытку?3. @olian04 хотя это немного связано с вопросом и, вероятно, является следующей проблемой, с которой сталкивается OP, это не отвечает на вопрос, который он задал
Ответ №1:
.getElementsByName()
возвращает массив элементов. Однако, используя его и захватывая первый элемент, вы получите только первый элемент в наборе переключателей, а не выбранный переключатель.
Поскольку у вас есть name
атрибуты, вы можете просто использовать путь для получения элемента следующим образом:
document.infoForm.question1.value
Затем вы можете сделать это для всех 4 вопросов, чтобы это выглядело примерно так:
function results() {
event.preventDefault();
var q1 = document.infoForm.question1.value;
var q2 = document.infoForm.question2.value;
var q3 = document.infoForm.question3.value;
var q4 = document.infoForm.question4.value;
console.log(q1, q2, q3, q4);
}
<form name="infoForm" id="infoForm" onsubmit="return results();" method="post">
<fieldset>
<legend>Here's a Quiz!</legend>
<div class="question">
quiz question 1<br>
<input type="radio" name="question1" value="W">W<br>
<input type="radio" name="question1" value="R1">R<br>
<input type="radio" name="question1" value="W">W<br>
</div>
<div class="question">
quiz question 2<br>
<input type="radio" name="question2" value="R2">R<br>
<input type="radio" name="question2" value="W">W<br>
<input type="radio" name="question2" value="W">W<br>
</div>
<div class="question">
quiz question 3<br>
<input type="radio" name="question3" value="W">W<br>
<input type="radio" name="question3" value="R3">R<br>
<input type="radio" name="question3" value="W">W<br>
</div>
<div class="question">
quiz question 4<br>
<input type="radio" name="question4" value="W">W<br>
<input type="radio" name="question4" value="W">W<br>
<input type="radio" name="question4" value="R4">R<br>
</div>
<input type="submit" value="Submit">
</fieldset>
</form>
Ответ №2:
В вашем коде есть некоторые ошибки.
Функция getElementsByName()
возвращает a NodeList
, поэтому вы не можете получить доступ к ее свойству value
. Попробуйте получить его первый индекс: getElementsByName()[0].value
Переменная event не определена. Я предполагаю, что вы используете функцию results
в качестве прослушивателя событий. Если это так, событие отправляется как параметр, и вам нужно его определить:
function results(event) {
event.preventDefault();
var q1 = document.getElementsByName('question1')[0].value;
var q2 = document.getElementsByName('question2')[0].value;
var q3 = document.getElementsByName('question3')[0].value;
var q4 = document.getElementsByName('question4')[0].value;
console.log(q1);
}
Комментарии:
1. Это всегда будет возвращать первый элемент в списке радио, а не выбранный.
2. Правильно! Извините, я этого не понял. Спасибо за комментарий