Javascript 不管条件输出如何,复杂if语句都会运行代码

Javascript 不管条件输出如何,复杂if语句都会运行代码,javascript,validation,Javascript,Validation,JS 如果isNaNBDyear==true | | isNaNBDmonth==true | | isNaNBDday==true | | BDday.length!=2 || BDmonth.length!=2 | | BDyear.length!=4. { document.getElementByIdBDyear.value= document.getElementByIdBDmonth.value= document.getElementByIdBDday.value= docume

JS

如果isNaNBDyear==true | | isNaNBDmonth==true | | isNaNBDday==true | | BDday.length!=2 || BDmonth.length!=2 | | BDyear.length!=4. { document.getElementByIdBDyear.value= document.getElementByIdBDmonth.value= document.getElementByIdBDday.value= document.getElementByIDDerror.style.display=inline BDstate=false BDcheck=false } HTML

脚本部分会运行,无论我输入的是数字还是单词,长度如何。我不明白它为什么会运行,但我怀疑是isNaN函数在不同的尝试和设置中无法正常工作。它应该找出输入的内容是否只是一个numric值,该值在dd/mm/yyyy的适当长度内,如果全部为false,则应该保持一切不变,BDcheck var为true,以便运行下一个if语句


有什么建议吗?

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

此外,isNaN返回一个布尔值,因此将其与true进行比较是多余的。你可以这样写:isNaNBDyear | isNaNBDmonth | isNaNBDday | 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
}

此外,您可能需要检查数值是否在有效范围内,而不是检查month的字符串长度是否为2个字符。例如,用户当前必须输入06,不带前导或尾随空格,顺便说一句,以便检查成功,而如果您实际检查数值是否在有效范围内,如Numbermonth.value>=1&&Numbermonth.value,则用户可以输入6。脚本是否在函数中?我看不出在加载文档时除了内联之外在哪里调用它,但即使这样,它也不在脚本标记中。请清理您的示例,以便我们更好地了解问题。提示:不要将真布尔值与真或假布尔值进行比较。如果一个值实际上是布尔值,而不仅仅是真值或假值,只需使用if isNaNBDyear | | isNaNBDmonth |等。。如果getSomeBooleanx===true,那么使用三重等于会有一点区别,但同样,只有当您得到的是truthy/false值而不是boolean值时,才会使用三重等于。另外,请阅读我该如何说:如果isNaN的结果为真/假,请在不实际使用真/假值的情况下执行某些操作?我发现了我的问题所在。这太可笑了。我说如果一天和一个月的长度不等于2,那么在我测试一个月中有1个数字的日期时,没有考虑到这些值可能是单个字符的值。这一点在任何时候都是正确的。我会试着把你说的话反复读一遍,直到我明白为止。编程的第一年。但是这些注释已经被考虑进去了,将尝试您的解决方案。非常感谢。
//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
}