Как использовать селектор запросов, чтобы проверить, заполнены ли ДВА поля ввода?

У меня есть функция следующим образом:

<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. Спасибо.

https://jsfiddle.net/vj9mk1bq/1/

Оба входа имеют класс input + b?

Jack Bashford 10.02.2019 21:28

да, есть: <input class = "input1" name = "gn"><br> <input class = "input1" name = "gn"><br>

Sweepster 10.02.2019 21:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 {выполнить код}?

Sweepster 10.02.2019 21:44
isValid -- это логическое значение , возвращаемое every() ... то есть просто if (isValid) . Что касается selector, это ваша строка выбора, такая как 'input.input' + b'. Подумайте о том, что на самом деле означает концепция querySelector.... запрос селектора css в dom
charlietfl 10.02.2019 21:46

Я только что они учили бы этому материалу в визуальной среде. Все игнорируют эту часть javascript, когда дело доходит до его обучения, и я не знаю, почему... я попробую.

Sweepster 10.02.2019 21:51

Извините, я не могу понять... я 100% самоучка

charlietfl 10.02.2019 21:52

Другие вопросы по теме