У меня есть функция следующим образом:
<script type = "text/javascript">
function displayquestion(a, ignore) {
var b = a - 1;
var currentInput = '';
var questions = document.getElementsByClassName("questionholder");
var showRequired = document.getElementById("requiredMessage");
function showNext() {
showRequired.style.display = "none";
for (var i = 0; i < questions.length; i++) {
questions[i].style.display = "none";
}
var nextQuestion = document.getElementById("question" + a);
if (nextQuestion !== null) {
nextQuestion.style.display = "inline-block";
}
}
// Check if question should ignore inputs
if (ignore == 1) { // yes, ignore the inputs so move on to next question
console.info("path 1");
showNext();
} else { //no, don't ignore the inputs
var input = document.querySelector('input.input' + b);
if (input.type == "radio") { //this is a radio input
if (document.querySelector("#question" + b + " input[type=radio]:checked")) { //a radio option is selected
console.info("path 2");
showNext();
} else { // no radio option is selected so show error
console.info("path 3");
showRequired.style.display = "block";
}
} else { // not a radio input
if (input !== null) {
var currentInput = input.value;
}
if (currentInput == '') { // the input is blank so show error
console.info("path 4");
showRequired.style.display = "block";
} else { // the input is not blank so move on to next question
console.info("path 5");
showNext();
}
}
}
}
</script>
<div id = "requiredMessage" style = "display:none"><p>This field is required.</p></div>
<form id = "TheForm" style = "display:block;">
<div class = "questionholder" id = "question1" style = "display:inline-block"> <!-- REQUIRED -->
<div style = "display:inline-block">
<h5>Given Name</h5>
<input class = "input1" name = "gn"><br>
</div>
<div style = "display:inline-block">
<h5>Last name</h5>
<input class = "input1" name = "ln"><br>
</div>
<div class = "holdButtons">
<a class = "text2button" onclick = "displayquestion(2)">Next</a>
</div>
</div>
<div class = "questionholder" id = "question2" style = "display:none"> <!-- REQUIRED -->
it worked!
</div>
</form>
На что я хочу обратить особое внимание в этом сегменте:
var input = document.querySelector('input.input' + b);
} else { // not a radio input
if (input !== null) {
var currentInput = input.value;
}
if (currentInput == '') { // the input is blank so show error
console.info("path 4");
showRequired.style.display = "block";
} else { // the input is not blank so move on to next question
console.info("path 5");
showNext();
}
}
Суть кода заключается в том, что пользователь должен заполнить ОБА поля ввода. Если ЛЮБОЕ поле ввода пусто, должно появиться сообщение об ошибке.
Однако мой код показывает ошибку только в тех случаях, когда ОБА поля ввода пусты или если пусто только первое поле ввода.
Если первое поле ввода заполнено, а второе пусто, пользователю должно быть показано сообщение об ошибке, но этого не происходит.
Насколько я понимаю, мой код на самом деле не проверяет оба поля ввода, а только проверяет, является ли какой-либо ввод пустым, но я не понимаю, как я могу исправить свой код, чтобы перебирать оба поля ввода, чтобы проверить, что они оба заполнены.
Пожалуйста, без jQuery. Спасибо.
да, есть: <input class = "input1" name = "gn"><br> <input class = "input1" name = "gn"><br>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


querySelector() находит только первый соответствующий элемент
Для нескольких входов вы можете сделать что-то вроде
var inputsArray = Array.from(document.querySelectorAll(selector));
var isValid = inputsArray.every(function(el){
return el.value; // empty string is falsy
});
В основном используется Array#every() для возврата логического значения на основе каждого элемента, имеющего значение. Вы можете настроить return для более детальной проверки по мере необходимости.
Я действительно не понимаю, как я вообще могу интегрировать это в свой код. Каким будет селектор: мой ввод var? Как мне тогда проверить isValid? Например: if (isValid == '') {отобразить ошибку) else {выполнить код}?
isValid -- это логическое значение , возвращаемое every() ... то есть просто if (isValid) . Что касается selector, это ваша строка выбора, такая как 'input.input' + b'. Подумайте о том, что на самом деле означает концепция querySelector.... запрос селектора css в dom
Я только что они учили бы этому материалу в визуальной среде. Все игнорируют эту часть javascript, когда дело доходит до его обучения, и я не знаю, почему... я попробую.
Извините, я не могу понять... я 100% самоучка
Оба входа имеют класс
input + b?