如何使用queryselector验证是否填写了两个输入字段?

时间:2019-02-10 20:25:43

标签: javascript html

我的功能如下:

<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.log("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.log("path 2");              

                showNext();
            } else { // no radio option is selected so show error                   
                console.log("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.log("path 4");

                showRequired.style.display = "block";
            } else { // the input is not blank so move on to next question
                console.log("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.log("path 4");

            showRequired.style.display = "block";
        } else { // the input is not blank so move on to next question
            console.log("path 5");

            showNext();
        }
    }

代码的要旨是应要求用户填写两个输入字段。如果“ EITHER”输入字段为空白,则会出现错误消息。

但是,我的代码仅在BOTH输入字段为空白或仅第一个输入字段为空白的情况下显示错误。

如果第一个输入字段已填写,但第二个字段为空白,则应向用户显示错误消息-但这没有发生。

据我了解,我的代码实际上并没有检查两个输入字段,而只是检查两个输入字段是否为空,但是我不清楚如何更正我的代码以遍历两个输入字段来检查他们都被填写了。

请不要使用jQuery。谢谢。

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

1 个答案:

答案 0 :(得分:1)

[5020, 5092]仅找到第一个匹配元素

对于多个输入,您可以执行类似的操作

querySelector()

基本上使用Array#every()返回基于每个具有值的元素的布尔值。您可以根据需要调整var inputsArray = Array.from(document.querySelectorAll(selector)); var isValid = inputsArray.every(function(el){ return el.value; // empty string is falsy }); 以进行更精细的验证