Я создаю простую анкету, в которой пользователь ответит на все вопросы и получит ответы, рассчитанные на основе значений баллов, присвоенных ответу.Затем функция JavaScript рассчитывает и отображает результаты на экране.
Расчет и ответы работают просто отлично, но я бы хотел, чтобы в форме появлялось оповещение, если на все вопросы не ответили (сейчас просто не запускается эта функция).У меня есть все вопросы, заданные с атрибутом «required», но в настоящее время ничего не появляется, чтобы показать, что на требуемый вопрос не ответили.Она просто не запускает функцию.
Сейчас у меня есть небольшая функция проверки, которая должна запускаться, когда пользователь нажимает на submit, и, если все проверено, она вызывает основную функцию для вычисления результатов:
function validateForm() {
var radios = document.getElementsByTagName('input[type="radio"]');
for (var i = 0, len = radios.length; i < len; i++) {
if (radios[i].checked) {
GetRadio();
}
else{
alert("You must answer all of the questions.");
}
}
}
function GetRadio() {
var QS1 = document.querySelector('input[name = "radio1"]:checked').value,
QS2 = document.querySelector('input[name = "radio2"]:checked').value,
QS3 = document.querySelector('input[name = "radio3"]:checked').value,
QS4 = document.querySelector('input[name = "radio4"]:checked').value,
QS5 = document.querySelector('input[name = "radio5"]:checked').value;
selfPoints = Number(QS1) + Number(QS2) + Number(QS3) + Number(QS4) + Number(QS5);...
Я ожидаю, что затем он должен запустить проверку, прежде чем запускать оставшуюся часть функции для вычисления результатов, и поставить флажок Alert, если он оставлен пустым.Вместо этого он ничего не запускает.Не все вопросы даны ответы, поэтому он не может рассчитать, но он также не выдает предупреждение.
Обновление
OKобновленный код не хотел работать, но первое предложение об использовании querySelectorAll в моем исходном коде начало работать.(Должно быть, я сделал что-то по-другому во второй раз, но понятия не имею, что), вот что я получил сейчас:
function validateForm() {
var radios = document.querySelectorAll('input[type="radio"]');
for (var i = 0, len = radios.length; i < len; i++) {
if (radios[i].checked) {
GetRadio();
}
else{
alert("You must answer all of the questions.");
break;
}
}
}
Это работает, выдает предупреждение и отклоняетоповещение, но теперь оно выдает оповещение, даже если на все вопросы дан ответ, а затем, когда я отклоняю его, вычисляет мои результаты.Почему он не просто запускает функцию GetRadio () для вычисления, когда установлены все флажки?
Обновление 2
Хорошо,код в том виде, в каком он есть:
function validateForm() {
var radios = [document.getElementsByName("radio1"),
document.getElementsByName("radio2"),
document.getElementsByName("radio3"),
document.getElementsByName("radio4"),
document.getElementsByName("radio5"),
document.getElementsByName("radio1-2"),
document.getElementsByName("radio2-2"),
document.getElementsByName("radio3-2"),
document.getElementsByName("radio4-2"),
document.getElementsByName("radio5-2"),
document.getElementsByName("radio1-3"),
document.getElementsByName("radio2-3"),
document.getElementsByName("radio3-3"),
document.getElementsByName("radio4-3"),
document.getElementsByName("radio5-3"),
document.getElementsByName("radio1-4"),
document.getElementsByName("radio2-4"),
document.getElementsByName("radio3-4"),
document.getElementsByName("radio4-4"),
document.getElementsByName("radio5-4"),
document.getElementsByName("radio1-5"),
document.getElementsByName("radio2-5"),
document.getElementsByName("radio3-5"),
document.getElementsByName("radio4-5"),
document.getElementsByName("radio5-5"),];
for (var i = 0, len = radios.length; i < len; i++) {
if (!radios[i].checked) {
alert("You must answer all of the questions.");
return;
}
}
GetRadio();
}
Он тянет группы, но похоже, что он все еще хочет, чтобы все переключатели были выбраны до того, как он запустит вычисление.Даже если есть ответ для каждой группы радиостанций, я получаю предупреждение.Как правильно сказать, что нужно проверить только одну радиостанцию в каждой группе?