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

Svi*_*ish 70 html javascript css validation

通过阅读这篇文章,我发现有一些"无效"和"无效"输入值的伪类.

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

daj*_*vax 126

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

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

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

field.setCustomValidity(""); 除非HTML5约束失败,否则将使该字段有效.

  • 另外,如果您希望浏览器的有效性消息显示在“input”或“blur”上,您可以使用 [field.reportValidity()](https://developer.mozilla.org/en-US/docs/Web/API /HTMLFormElement/reportValidity) 之后。 (12认同)
  • 惊人的。谢谢你。添加到 http://codepen.io/kevinSuttle/post/the-current-state-of-web-forms (2认同)
  • @SamCarlton 天啊,我在无数的问答中寻找类似的东西,但没有人提到“reportValidity”来检查表单而不提交。非常感谢,拯救了我的理智 (2认同)

Rae*_*kye 5

编辑:有人澄清说您正在寻找 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发送到服务器的表单 a和idjavascript 使用的表单)。对于文本区域,您可以使用.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。同样,您不应该依赖于此,但是如果您只是为了威慑普通人,那么这是一个简单的解决方案。

  • 你完全正确,但我认为你没有完全理解这个问题。在 HTML5 中,有多种方法可以将属性值添加到暗示内置验证规则的 HTML 标记中。当浏览器应用这些规则时,输入字段将匹配 CSS 中的 ":valid" 或 ":invalid" 伪类。因此,您可以使用这些属性编写 HTML,使用带有规则的 ":valid" 和 ":invalid" 选择器编写 CSS,并在完全不使用任何 JavaScript 的情况下提供视觉反馈。问题是“:valid”状态是否可以作为 DOM 属性使用,基本上。 (9认同)