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

时间:2014-01-15 10:26:27

标签: javascript html

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>

Javscript验证功能:

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;
    }
}

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

5 个答案:

答案 0 :(得分:4)

您的问题在这里:

<强>错

if(byTitle == byAuthor == startDate == endDate == ""){

<强>正确

if(byTitle === "" && byAuthor ==="" && startDate ==="" && endDate === ""){

通过仅评估变量,Javascript有一种更简单的方法来评估值是否为空,空字符串或0:

if(!byTitle  && !byAuthor && !startDate && !endDate ){ 

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

答案 1 :(得分:2)

"" falsy ,因此您只需使用:

if (!byTitle && !byAuthor && !startDate && !endDate) {
    ...
}

这会在变量(!)上使用the logical NOT operator将它们转换为布尔值,然后返回相反的值。

JSFiddle demo

答案 2 :(得分:1)

也许你可以这样;

$(function(){
    var bytitle = $("input[name=byTitle]").val();
    var byAuthor = $("input[name=byAuthor]").val();
    var startDate = $("input[name=startDate]").val();
    var endDate = $("input[name=endDate]").val();

    if( bytitle == '' && byAuthor == '' && startDate == '' && endDate == '')
        alert("Enter at least one search parameter!");
});

答案 3 :(得分:0)

您可以在条件中使用AND

byTitle = "";
byAuthor = "";
startDate =""; 
endDate = ""
if(byTitle == "" && byAuthor =="" && startDate =="" && endDate == ""){
        alert("Enter at least one search parameter!");
        return false;
    }

http://jsfiddle.net/tCJ95/

答案 4 :(得分:0)

试试这个:

var ee = byTitle = byAuthor = startDate = endDate="";
if(ee=="null" || ee.length==0 || !ee)
{
    alert("all fields must be filled out");
    return false;
}