我可以在javascript中标记无效的字段吗?

时间:2012-05-27 23:26:02

标签: javascript html css validation

从阅读this post我发现有一些'无效'和'无效'输入值的伪类。

有没有办法可以将输入字段标记为javascript无效/有效?或者,我可以覆盖使用的验证方法吗?

3 个答案:

答案 0 :(得分:110)

您可以使用customValidity函数来实现此目的。

如果向字段添加customValidity消息,则该消息将变为无效。当您将消息设置为空字符串时,它将再次变为有效(除非由于其他原因它无效)。

field.setCustomValidity("Invalid field.");会使该字段无效。

除非HTML5约束失败,否则

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验证您的字段,然后在需要时添加validinvalid个类。我制作了a plugin,其工作方式与非HTML5浏览器相同。