2014-01-15 33 views
2

HTML表單的外觀:的Javascript - 檢查多個字段爲空不工作

<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不會將它們視爲相同的空域?

回答

3

你的問題就在這裏:

錯誤

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

正確

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

JavaScript有評估,如果值爲空,空一個更簡單的方法字符串或0通過只評估變量:

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

另一個建議,我想分享是使用「===」而不是「==」。

+1

謝謝,直到現在我還不知道'==='。 – Vladimir

+0

您不必在此處使用'==='而不是'=='。沒有理由要確保這些值是字符串。此外,您從[我的答案](http://stackoverflow.com/a/21134955/1317805)拿來的塊的描述不正確。 「!」運算符不會評估值是否爲空,空字符串或0,它會將值轉換爲布爾值,然後返回相反值。 –

+1

+1,永遠不會知道'!byTitle'也會檢查空字符串 – freefaller

2

""falsy,所以你可以簡單地使用:

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

這對你的變量(!)使用the logical NOT operator將它們轉換爲布爾值,則返回相反。

JSFiddle demo

+0

尼斯 「falsy」 鏈接 – freefaller

0

您可以在條件中使用AND

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

http://jsfiddle.net/tCJ95/

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!"); 
}); 
+0

jQuery是沒有標記在這個問題上,也不是提及。 –

+0

哦,我錯過了對不起。 –

0

試試這個:

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