Javascript - 检查多个字段是否为空不起作用

Vla*_*mir 3 html javascript

HTML 表单外观:

<form action="search" id="searchForm" onsubmit="return validateSearch()">
    <input type="text" name="byTitle" pattern="[a-zA-Z0-9]+" placeholder="Enter a word from title">
    <input type="text" name="byAuthor" pattern="[a-zA-Z]+\s[a-zA-Z]+" placeholder="First-name Last-name"> <!--  pattern="\w+ \w+" -->
    <input id="startDate" name="startDate" type="date">
    <input id="endDate" name="endDate" type="date">
    <input type="submit" name="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

Javascript 验证功能:

function validateSearch() {

    var byTitle   = document.getElementById('searchForm').byTitle.value;
    // alert(byTitle);
    var byAuthor  = document.getElementById('searchForm').byAuthor.value;
    // alert(byAuthor);
    var startDate = document.getElementById('searchForm').startDate.value;
    //alert(startDate);
    var endDate   = document.getElementById('searchForm').endDate.value;
    //alert(endDate);       

    if(byTitle == byAuthor == startDate == endDate == ""){
        alert("Enter at least one search parameter!");
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我将所有表单字段留空/未填写并按提交,alert("Enter at least one search parameter!");消息应该弹出,但它没有。想看看我alert在每个字段读取后插入的每个字段的值是什么,它们都是相同的,空字符串/空白。那么,为什么if condition不将它们视为相同的空白字段?

Dal*_*rzo 7

你的问题在这里:

错误的

if(byTitle == byAuthor == startDate == endDate == ""){
Run Code Online (Sandbox Code Playgroud)

正确的

if(byTitle === "" && byAuthor ==="" && startDate ==="" && endDate === ""){
Run Code Online (Sandbox Code Playgroud)

Javascript 有一种更简单的方法来评估值是 null、空字符串还是 0,只需评估变量:

if(!byTitle  && !byAuthor && !startDate && !endDate ){ 
Run Code Online (Sandbox Code Playgroud)

我想分享的另一个建议是使用“===”而不是“==”。