复杂的if语句运行代码而不考虑条件输出
complex if statement runs code regardless of condition output
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>
脚本部分运行,无论我在输入中输入的是数字还是单词,都有任何长度,我不明白它为什么运行,但我怀疑是"isNaN"函数在不同的尝试和设置中无法正常工作。它应该找出输入的内容是否只是一个长度适合dd/mm/yyyy的numric值,如果它都是false,它应该保持一切原样,BDcheck var为true,这样下一个if语句将运行
有什么建议吗?
确保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)才能成功进行检查,而如果您实际检查数值是否在(Number(month.value) >= 1 && Number(month.value) <= 12)
等有效范围内,则用户可以输入" 6 "
。一天一年都是如此。
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 如何做到这一点,使代码在不传递条件后执行函数
- 在BoilerplateJS浏览器加载所有脚本(在其他模块中),而不考虑激活的模块
- JS toLocaleString始终显示货币符号,而不考虑区域设置
- 在呈现网页时复制网页,而不考虑参考底图的来源
- 如何使用 javascript 获取 UTC 格式的日期,而不考虑当前系统日期
- 转换 JSON 日期,不考虑时区
- 使用XPath选择包含文本的节点,而不考虑CasperJS中的空白
- 使用简单的角度滤波器来替换输入字符串中某些字符串的所有出现,而不考虑大小写和空格
- 角度高图表和ng网格标题不考虑帧宽度
- 如果不满足条件语句,则触发引导模式
- for循环在javascript中循环一次后不检查条件
- jQuery/JavaScript代码如何将表导出为CSV文件而不考虑表's大小.看看@jsfiddle链接
- 捕获给定类型的所有事件,而不考虑气泡/目标
- 选项卡分组和选项卡着色:如何将此功能应用于从我的网页打开的选项卡,而不考虑浏览器
- CSS不透明度转换;在动画过程中不考虑覆盖不透明度
- 如何增加光滑块高度,而不考虑其内容
- 正则表达式不考虑 .在JavaScript中进行模式测试时
- 为什么在OR条件下计算时不考虑零,而在and条件下计算时考虑零
- 复杂的if语句运行代码而不考虑条件输出