文本框输入的value属性可以为null吗?

时间:2016-05-04 13:25:31

标签: javascript validation

我有以下代码:

function validateForm () {
    var x = document.forms["myForm"]["fname"].value;
    if (x == null || x == "") {
    alert("Name must be filled out");
    return false;
}

是否有必要检查x == null是否正确验证表单是否已填写?

文本框输入值是否可以 null

3 个答案:

答案 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验证中)