复杂的if语句运行代码而不管条件输出

时间:2014-04-22 20:30:22

标签: javascript validation

JS

if (isNaN(BDyear) == true || isNaN(BDmonth) == true || 
    isNaN(BDday) == true || BDday.length != 2 || 
    BDmonth.length != 2 || BDyear.length != 4)
{
    document.getElementById("BDyear").value = ''
    document.getElementById("BDmonth").value = ''
    document.getElementById("BDday").value = ''
    document.getElementById("bderror").style.display = "inline"
    BDstate = false BDcheck = false
}

HTML

<tr>
    <td>שנת לידה</td>
    <td>
        <input class="text" id="BDyear" maxlength="4" style="width:8%" />&nbsp/&nbsp
        <input class="text" id="BDmonth" maxlength="2" style="width:5%" />&nbsp/&nbsp
        <input class="text" id="BDday" maxlength="2" style="width:5%" />
        <br />
        <p id="bderror" style="position:absolute; top:70%; color:red; font:65% arial; display:none">תאריך לידה לא תקין</p>
        <p id="bderroryoung" style="position:absolute; top:70%; color:red; font:65% arial; display:none">חובה להיות מעל גיל 13</p>
    </td>
</tr>

脚本部分运行无论我输入一个或多个单词,任何长度,我都不明白它为什么运行,但我怀疑它是&# 34; isNaN&#34;从不同的尝试和设置无法正常工作的功能。它应该知道输入的内容是否只是dd / mm / yyyy的正确长度的数值,如果它全部为假,它应该保留所有内容。和BDcheck var为真,所以下一个if语句将运行

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

确保BDyear,BDday和BDmonth实际包含值;您可能需要在isNaN函数中使用document.getElementById("BDyear").value。该值也可能是一个字符串,因此您可能需要先尝试将其转换为数字,然后再检查isNaN,如下所示:isNaN(Number(document.getElementById("BDyear").value))

此外,isNaN返回一个布尔值,因此将其与true进行比较是多余的。您可以像if (isNaN(BDyear) || isNaN(BDmonth) || isNaN(BDday) || BDday.length != 2 || BDmonth.length != 2 || BDyear.length != 4)一样编写它,可能只是我刚刚建议的更改。

最终,代码可能如下所示:

//assuming BDstate and BDcheck variables are already defined
var year = document.getElementById("BDyear");
var month = document.getElementById("BDmonth");
var day = document.getElementById("BDday");
if (isNaN(Number(year.value)) || isNaN(Number(month.value) || isNaN(Number(day.value)) || day.value.length != 2 || month.value.length != 2 || year.value.length != 4)
{
    year.value = ''
    month.value = ''
    day.value = ''
    document.getElementById("bderror").style.display = "inline"
    BDstate = false
    BDcheck = false
}

此外,您可能需要检查数值是否在有效范围之间,而不是检查字符串长度为2个字符。例如,用户当前必须输入"06"(没有前导或尾随空格,btw)才能使检查成功,而如果您实际检查数字,他们可以输入" 6 "值在(Number(month.value) >= 1 && Number(month.value) <= 12)之类的有效范围内。白天和同年也一样。