2015-07-20 32 views
0
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:这个if/else语句的正确格式是什么?

<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

+0

您需要括号......围绕需要一起检查的部分。 – epascarello

回答

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

因为你的条件是OR条件,组2个语句转化为显性块,以便正确的值进行评估。

此外,它应该很好,只是检查!time.value而不是明确检查未定义。很会照顾检查未定义,为null或0

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

+0

我刚刚意识到的一点是,如果选择时间或日期,并且复选框被选中,那么表单将会通过。任何方式我可以告诉JS,如果!date.value和/或!time.value,不要让表单通过?我刚试过&& ||但它没有工作。我猜这不是有效的代码。 –

+0

你不能使用&& ||',因为它是无效的,因为'&&','||'是二元运算符,它们中的每一个都必须由2个“操作数”分开。 –

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

这是一个条件语句的熊:P

后||运算符,你有双等号的!运营商。尝试替换它们:

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