【发布时间】:2014-09-04 23:16:54
【问题描述】:
好吧,这很奇怪。我确定我遗漏了一些明显的东西。
HTML:
<form>
<input type='text' required />
<button>check field validity</button>
</form>
JS:
var field = document.querySelector('input[type=text]');
document.querySelector('button').addEventListener('click', function() {
alert('Validates: '+field.willValidate);
alert('Value missing: '+field.validity.valueMissing);
}, false);
如果提交表单时字段留空,则如您所料,提交会被禁止,但第一个警报会检查字段的有效性状态,会给出true。 为什么?
为了进一步反驳这一点,第二个警报确认该字段存在问题,并按预期提供true。
我错过了什么?
[旁注:MDN seems to thinkwillValidate 是方法,而不是属性。]
[编辑]
正如下面的评论者所指出的,willValidate 表示该字段是否是验证的候选,而不是尽管其名称具有误导性,但该字段是否会验证。
如果通过 JS 提交表单,这可能意味着判断字段是否有效的唯一方法是遍历其 validity 对象并查看是否有任何标志设置为 true。
[编辑 2]
事实证明,您可以只检查字段上的 validity.valid,即使 valid 标志不会显示,如果您 console.log 整个有效性对象。因此,这似乎是确定一个字段是否会假设验证的方法。
【问题讨论】:
-
willValidate是一个属性,表示输入是否可以被验证,而不是它是否有效,请参阅html5rocks.com/en/tutorials/forms/constraintvalidation/…
标签: javascript html forms validation