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%" /> / 
<input class="text" id="BDmonth" maxlength="2" style="width:5%" /> / 
<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语句将运行
有什么建议吗?
答案 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)
之类的有效范围内。白天和同年也一样。