admin管理员组

文章数量:1122854

html5 表单必填项,javascript

javascript - HTML5表单必填属性。 设置自定义验证消息?

我有以下HTML5表格:[/]

*****

目前当我在空白时点击输入时,会出现一个弹出框,上面写着“请填写此字段”。 如何将该默认消息更改为“此字段不能留空”?

编辑:另请注意,类型密码字段的错误消息只是*****.要重新创建此项,请为用户名提供值并点击提交。

编辑:我正在使用Chrome 10进行测试。 请这样做

13个解决方案

212 votes

使用invalid:

document.addEventListener("DOMContentLoaded", function() {

var elements = document.getElementsByTagName("INPUT");

for (var i = 0; i < elements.length; i++) {

elements[i].oninvalid = function(e) {

e.target.setCustomValidity("");

if (!e.target.validity.valid) {

e.target.setCustomValidity("This field cannot be left blank");

}

};

elements[i].oninput = function(e) {

e.target.setCustomValidity("");

};

}

})

我按照@itpastorn在评论中的建议从Mootools改为vanilla JavaScript,但是你应该能够在必要时计算Mootools的等价物。

编辑

我在这里更新了代码,因为invalid的工作方式与我最初回答时的理解略有不同。 如果将oninvalid设置为空字符串以外的任何值,则会导致该字段被视为无效; 因此,你必须在测试有效性之前清除它,你不能只是设置它并忘记。

进一步编辑

正如@ thomasvdb在下面的评论中指出的那样,你需要在invalid之外的某些事件中清除自定义有效性,否则可能需要额外通过oninvalid处理程序来清除它。

robertc answered 2019-02-13T20:46:42Z

174 votes

这是在HTML5中处理自定义错误消息的代码

oninvalid="this.setCustomValidity('Enter User Name Here')"

οninput="this.setCustomValidity('')" />

这部分很重要,因为它在用户输入新数据时隐藏了错误消息:

οninput="this.setCustomValidity('')"

Somnath Kadam answered 2019-02-13T20:47:13Z

85 votes

在HTML5事件oninvalid的帮助下控制自定义消息非常简单

这是代码:

oninvalid="this.setCustomValidity('Witinnovation')"

onvalid="this.setCustomValidity('')">

这是最重要的:

onvalid="this.setCustomValidity('')"

Ashwini Jain answered 2019-02-13T20:47:50Z

63 votes

注意:这不再适用于Chrome,未在其他浏览器中测试过。 请参阅下面的编辑。 这个答案留待这里作为历史参考。

如果您认为验证字符串确实不应该由代码设置,则可以将输入元素的title属性设置为“此字段不能留空”。 (适用于Chrome 10)

title="This field should not be left blank."

见[/]

在Firefox中,您可以添加以下属性:

x-moz-errormessage="This field should not be left blank."

编辑

自从我最初写这个答案以来,这似乎已经改变了。 现在添加标题不会更改有效性消息,它只是添加了消息的附录。 上面的小提琴仍然适用。

编辑2

Chrome现在不对Chrome 51的title属性执行任何操作。我不确定此更改的版本。

kzh answered 2019-02-13T20:48:51Z

35 votes

我创建了一个小型库来简化更改和翻译错误消息。 您甚至可以使用Chrome中的title或Firefox中的x-moz-errormessage按错误类型更改文本。 在GitHub上查看它,并提供反馈。

它的使用方式如下:

jsFiddle有一个演示版。

hleinone answered 2019-02-13T20:49:29Z

33 votes

在HTML5 oninvalid事件的帮助下控制自定义消息非常简单

这是代码:

User ID

oninvalid="this.setCustomValidity('User ID is a must')">

Dharmendra Jha answered 2019-02-13T20:49:56Z

31 votes

通过在正确的时间设置和取消设置onchange,验证消息将完美运行。

oninvalid="this.setCustomValidity('Username cannot be empty.')"

οnchange="this.setCustomValidity('')" type="text" />

我使用了onchange而不是oninput,它更通用,即使通过JavaScript在任何条件下更改值也会发生。

Salar answered 2019-02-13T20:50:29Z

17 votes

试试这个,它更好并经过测试:

HTML:

oninvalid="InvalidMsg(this);"

οninput="InvalidMsg(this);"

name="email"

type="email"

required="required" />

JAVASCRIPT:

function InvalidMsg(textbox) {

if (textbox.value === '') {

textbox.setCustomValidity('Required email address');

} else if (textbox.validity.typeMismatch){

textbox.setCustomValidity('please enter a valid email address');

} else {

textbox.setCustomValidity('');

}

return true;

}

演示:

[/]

Rikin Patel answered 2019-02-13T20:51:06Z

10 votes

这是非常简单的控制HTML输入类型所需的消息。 不需要JS,或CSS只使用HTML5。

首先,您只能使用此“oninvalid”属性

或者您可以使用“oninput”属性

Obaidul Haque answered 2019-02-13T20:51:45Z

9 votes

我发现最简单,最干净的方法是使用数据属性来存储自定义错误。 测试节点的有效性并使用一些自定义html处理错误。

le javascript

if(node.validity.patternMismatch)

{

message = node.dataset.patternError;

}

和一些超级HTML5

Collin White answered 2019-02-13T20:52:24Z

1 votes

我有一个更简单的vanilla js解决方案:

对于复选框:

document.getElementById("id").oninvalid = function () {

this.setCustomValidity(this.checked ? '' : 'My message');

};

输入:

document.getElementById("id").oninvalid = function () {

this.setCustomValidity(this.value ? '' : 'My message');

};

bernhardh answered 2019-02-13T20:53:02Z

0 votes

根据Salar对JSX和React的回答,我注意到React Select的行为与关于验证的字段不同。 显然,需要一些变通方法来显示自定义消息并防止它在不方便的时候显示。

我在这里提出了一个问题,如果有什么帮助的话。 这是一个带有工作示例的CodeSandbox,这里重现了最重要的代码:

Hello.js

import React, { Component } from "react";

import SelectValid from "./SelectValid";

export default class Hello extends Component {

render() {

return (

required

defaultValue="foo"

onChange={e => e.target.setCustomValidity("")}

onInvalid={e => e.target.setCustomValidity("foo")}

/>

button

);

}

}

SelectValid.js

import React, { Component } from "react";

import Select from "react-select";

import "react-select/dist/react-select.css";

export default class SelectValid extends Component {

render() {

this.required = !this.props.required

? false

: this.state && this.state.value ? false : true;

let inputProps = undefined;

let onInputChange = undefined;

if (this.props.required) {

inputProps = {

onInvalid: e => e.target.setCustomValidity(this.required ? "foo" : "")

};

onInputChange = value => {

this.selectComponent.input.input.setCustomValidity(

value

? ""

: this.required

? "foo"

: this.selectComponent.props.value ? "" : "foo"

);

return value;

};

}

return (

onChange={value => {

this.required = !this.props.required ? false : value ? false : true;

let state = this && this.state ? this.state : { value: null };

state.value = value;

this.setState(state);

if (this.props.onChange) {

this.props.onChange();

}

}}

value={this && this.state ? this.state.value : null}

options={[{ label: "yes", value: 1 }, { label: "no", value: 0 }]}

placeholder={this.props.placeholder}

required={this.required}

clearable

searchable

inputProps={inputProps}

ref={input => (this.selectComponent = input)}

onInputChange={onInputChange}

/>

);

}

}

GuiRitter answered 2019-02-13T20:53:48Z

0 votes

好的,oninvalid运行良好但即使用户输入了有效数据也显示错误。 所以我用下面的方法解决它,希望它对你也有用,

oninvalid="this.setCustomValidity('Your custom message.')" οnkeyup="setCustomValidity('')"

Umesh Patil answered 2019-02-13T20:54:22Z

本文标签: html5 表单必填项javascript