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不将它们视为相同的空白字段?
你的问题在这里:
错误的
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)
我想分享的另一个建议是使用“===”而不是“==”。