通过阅读这篇文章,我发现对于HTML5引入了一些针对“有效”和“无效”输入值的伪类。
有没有一种方法可以从JavaScript将输入字段标记为无效/有效?还是可以替代使用的验证方法?
Answers:
您可以为此使用customValidity函数。
如果将customValidity消息添加到该字段,它将变为无效。当您将消息设置为空字符串时,它再次变为有效(除非由于其他原因而无效)。
field.setCustomValidity("Invalid field.");
将使该字段无效。
field.setCustomValidity("");
除非该字段无法通过HTML5约束,否则它将使该字段有效。
编辑:有人澄清说,您正在寻找DOM的“有效”“无效”属性。
我会使用将属性添加到每个标签dom_object.setAttribute("isvalid", "true")
。您还可以具有中央验证功能,该功能可以每次(并dom_object.getAttribute("isvalid")
每次使用)更新这些属性。
每当元素失去焦点时,或您需要时,都可以运行此功能。
不太优雅,但是很不幸,现在javascript和HTML5没有“伪”支持。
如果我理解您的问题,则可以使用Javascript进行验证。但是,请注意,绕过客户端验证(尤其是javascript验证)非常容易。您永远不应信任客户端数据,而应始终在服务器端进行检查。
例如,我可以通过检查源代码轻松找到元素ID,然后document.getElementById('some_id').setAttribute('max', new_number)
更改最大值(这是您链接中的条目之一)。
有多种方法可以做到,所以我将尝试为您提供一般的成语。
您可以通过执行操作来获取值document.getElementById('form_element_id').value
(确保您提供一个name
发送到服务器的表单,以及一个id
由javascript使用的表单)。对于文本区域,可以使用.innerHTML
。
然后,将值包含在变量中,可以通过多种方法进行检查。
例如,您可以这样做if (parseInt(my_value) < 0) //error
。您也可以使用正则表达式,我不会全部解释,但是您可以从http://www.w3schools.com/jsref/jsref_obj_regexp.asp开始。我知道w3schools并不是最好的资源,但我认为这是一个不错的起点。
现在进入验证部分:添加onsubmit="return validateForm()
到表单标签中,validateForm()是执行所有检查的函数。并且该函数仅true
在有效时返回,false
否则返回。这将覆盖默认的验证功能(默认情况下不执行任何操作)。
因此,在上述示例中,//error
将被替换为return false
。您也可以做其他事情;例如警告错误,然后返回false。您还可以使用javascript突出显示无效字段(不确定这是否是“从javascript中将输入字段标记为无效/有效”)。
当然,如果您不想检查所有字段,则仅在某些字段通过时才返回true。同样,您不应该依赖于此,但是如果您只是为了阻止普通民众,那么这是一个简单的解决方案。
有没有一种方法可以从JavaScript将输入字段标记为无效/有效?
不幸的是,您无法在JavaScript中设置伪类的样式,因为它们不是真正的元素,因此在实际的DOM中不存在。
使用香草JavaScript时,您将使用验证API。
在jQuery中,您可以简单地做到这一点,http://jsfiddle.net/elclanrs/Kak6S/
if ( $input.is(':invalid') ) { ... }
还是可以替代使用的验证方法?
如果您使用的是HTML5验证,请坚持使用标记。否则,您可以使用禁用HTML5验证$form.attr('novalidate', 'novalidate')
并使用JS来验证您的字段,然后在需要时添加valid
或invalid
类。我做了一个可以像这样的插件来支持非HTML5浏览器。
input:invalid + label::after{content: " INVALID";color: red;}
如果该字段无效(例如,如果某个电子邮件字段中包含无效的电子邮件),则在该输入字段旁边的标签之后添加一个红色的INVALID文本,该字段无效