从阅读this post我发现有一些'无效'和'无效'输入值的伪类。
有没有办法可以将输入字段标记为javascript无效/有效?或者,我可以覆盖使用的验证方法吗?
答案 0 :(得分:110)
您可以使用customValidity函数来实现此目的。
如果向字段添加customValidity消息,则该消息将变为无效。当您将消息设置为空字符串时,它将再次变为有效(除非由于其他原因它无效)。
field.setCustomValidity("Invalid field.");
会使该字段无效。
field.setCustomValidity("");
将使该字段有效。
答案 1 :(得分:3)
修改强>: 有人澄清说你正在寻找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
以及javascript使用的id
)。对于textareas,您可以使用.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。同样,你不应该依赖于此,但如果你只是为了阻止普通人,那么这是一个简单的解决方案。
答案 2 :(得分:-14)
有没有办法可以将输入字段标记为无效/有效 JavaScript的?
不幸的是,你不能在JavaScript中设置伪类,因为它们不是真正的元素,它们不存在于实际的DOM中。
使用vanilla JavaScript,您可以使用validation API。
在jQuery中,你可以简单地执行此操作,http://jsfiddle.net/elclanrs/Kak6S/
if ( $input.is(':invalid') ) { ... }
或者,我可以覆盖使用的验证方法吗?
如果您正在使用HTML5验证,请坚持使用标记。否则,您可以使用$form.attr('novalidate', 'novalidate')
禁用HTML5验证,并使用JS验证您的字段,然后在需要时添加valid
或invalid
个类。我制作了a plugin,其工作方式与非HTML5浏览器相同。