这个if / else语句的正确格式是什么?

时间:2015-07-20 23:24:36

标签: javascript if-statement

function checkforinput() {

    var valid = true;
    var date = document.getElementById('date');
    var time = document.getElementById('time');
    var checkbox = document.getElementById('checkbox-1-1');
    if (date.value == "" && time.value == "" && checkbox.checked == false || date.value !== "undefined" && time.value !== "undefined" && checkbox.checked) {
        document.getElementById('errMsg10').innerHTML = "*Please Schedule in Advance or Select Now";
        valid = false;
    } else {
        document.getElementById('errMsg10').innerHTML = "";
    }

    return valid;
}

HTML:

<input id="date" class="datentime" type="date" name="date" min="2015-07-18" max="2015-12-31" value="1"/>
<input id="time" class="datentime" type="time" name="time" value="1"/><br>
<h2 class="bottomOpt">OR</h2><span id="errMsg10"></span>
<h1 class="bottomOpt"><span class="adnow">Now</span><br><span id="asap">*We'll send help ASAP.</span></h1>
<input type="hidden" name="now" value="0"/>
<input type="checkbox" id="checkbox-1-1" class="regular-checkbox" name="now" value="1" /><label for="checkbox-1-1"></label>
<input type="hidden" name="status" value="3"/>

在上面的代码中,我要做的是要求输入日期,时间和复选框不能为空,但它们也不能全部被选中。用户选中复选框选择日期和时间。

if / else语句的第一部分似乎工作正常,但条件中||之后的代码似乎是错误的。如果选择了日期和时间但未选中复选框,则代码可以正常工作。如果选中复选框,但未选中日期和时间,则代码不起作用。它仍显示errMsg10

3 个答案:

答案 0 :(得分:1)

放入另一组括号以正确分组布尔逻辑。

if ( (date.value == "" && time.value == "" && checkbox.checked == false) || 
     (date.value !== "undefined" && time.value !== "undefined" && checkbox.checked) ) { 
       // bad input...
    }
else {
   // good input...
}
顺便说一下,你确定要在“未定义”周围引用,比较那个字符串,或者你的意思是JavaScript undefined常数???

答案 1 :(得分:1)

这是条件陈述的熊:P

在||之后操作员,你有双等号的标志!运营商。尝试用以下代码替换它们:

date.value != "undefined" && time.value != "undefined"

答案 2 :(得分:0)

if ( (!date.value && !time.value && !checkbox.checked) 
  || (date.value  && time.value && checkbox.checked)) {

因为您的条件是OR条件,所以将2个语句分组为显式块,以便评估正确的值。

另外,检查!time.value而不是明确检查未定义应该没问题。它将检查undefined,null或0。

另请注意,使用===比使用==

更快