我有以下代码:
function validateForm () {
var x = document.forms["myForm"]["fname"].value;
if (x == null || x == "") {
alert("Name must be filled out");
return false;
}
是否有必要检查x == null
是否正确验证表单是否已填写?
文本框输入值是否可以 null ?
答案 0 :(得分:1)
文本框的值:是,应该,或永远不能 null 。
最初:给定元素属性值的每个默认\空值应与其预期值的类型匹配。 尽管JavaScript的类型有些通用,但元素属性值的默认/空类型应符合可赋值的接受类型。
typeof document.forms["myForm"]["fname"].value
>> "string"
对于每个浏览器供应商来说,这不是一个明显的要求,但这是一个原则,没有开发人员应该监督。
DOM元素的任何给定事件属性都需要函数。 函数的类型是对象。构造任何特定对象失败的结果是 null 对象。这就是 typeof null, object 的原因。一个不包含对象但保留其符号类型的对象。
typeof document.forms["myForm"]["fname"].onclick
>> "object"
因此 null值的含义是,它应该是某种对象。这是:不包含对象的对象。那是空的。
document.forms["myForm"]["fname"].onclick
>> null
NaN 的后续类型应为 number ...,依此类推。
输入值因此需要字符串的类型,因此应始终为字符串类型,不包含任何字符串值的字符串,例如:“ “ - 默认情况下!
document.forms["myForm"]["fname"].value
>> ""
因此,您可以通过以下方式检查“姓名必须填写”要求的[非空]条件:
function validateForm () {
var x = document.forms["myForm"]["fname"].value;
if ( x == "") {
alert("Name must be filled out");
return false;
}
但由于它是一个“名称”字段,您可能需要一些额外的条件预防措施,以确保它仅验证符合您接受的令牌。
一项很可能变得非常强大的任务
但是,if ( x == "")
足以确保它不是空的。
恭喜你通过阅读达到了这条线。
修改强>
当前浏览器还支持输入元素上的内置必需属性。
为了避免完全不可靠的浏览器嗅探,浏览器版本等,我们可以使用功能检测来编写浏览器供应商的无意识代码。
required
属性与if ( x == "")
完全相同。
这是一个“演示”(!不要与生产代码混淆)。
_ = document.all;
"required" in _.nameField ?
_.nameField.required = 1 : "otherwise add your javascript routine to (_.nameF..) here";
console.log(({
"true": "property supported",
"false": "unsupported property"
})[!!_.nameField.required]);
delete _;
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="#">
Name:
<input type="text" id="nameField">
<input type="submit" value="submit">
</form>
<script>
</script>
</body>
</html>
答案 1 :(得分:0)
我建议你做以下事情:
function validateForm () {
var x = document.forms["myForm"]["fname"].value;
if ( ! x ) {
alert("Name must be filled out");
return false;
}
return true;
}
这样它会检查x是否为空字符串,null,undefined或NaN(x应该始终是一个字符串)。
我还建议从验证功能中删除警报,并测试函数的结果以显示警报。
答案 2 :(得分:0)
在其他答案和评论中已经说过,在这种特殊情况下,输入值属性永远不会 null 。所以不,没有必要执行该检查。如您在其他答案中所指出的那样,只需使用(x == '')
或甚至(x)
这样的表达就足够了。
请注意,对于(x == null || x == "")
为空,未定义<的所有情况,执行x
实际上会返回 false / em>(或我猜是初始化),零或 false ,包括零元素或只有一个空插槽的数组。这听起来有点矫枉过正,但鉴于我缺乏关于javascript的知识,它可能在我不知道的某种情况下有用。 (然后可以将其复制到我们在问题片段中看到的input.value验证中)