HTML5联系表中必填字段错误消息的语言更改

75

我想要改变HTML5表单字段中错误信息的语言。

这是我的代码:

<input type="text" name="company_name"  oninvalid="setCustomValidity('Lütfen işaretli yerleri doldurunuz')" required /> 

但是在提交时,即使字段不为空,我仍然收到错误消息。

我尝试使用<input type="text" name="company_name" setCustomValidity('Lütfen işaretli yerleri doldurunuz') required />

但是接下来会显示英文消息。 有人知道如何显示其他语言的错误消息吗?

敬礼,Zoran


你能展示一下 setCustomValidity 函数吗? - antyrat
我以为这是内置函数?难道不是吗? - Zoran
12个回答

99
"setCustomValidity" 的作用不仅是设置验证信息,它本身还会将字段标记为无效。它允许您编写自定义验证检查,这些检查不受本地支持。您有两种可能的方法来设置自定义消息,一种简单的方法不涉及Javascript,另一种则需要。最简单的方法是仅使用输入元素上的 "title" 属性-其内容与标准浏览器消息一起显示。"
<input type="text" required title="Lütfen işaretli yerleri doldurunuz" />

enter image description here

如果您只想显示自定义消息,则需要一些JavaScript。我已经在这个fiddle中为您提供了两个示例。


我会选择JavaScript解决方案。有没有一种简单的方法来检查所有空字段?在我的情况下,所有字段都是必填的,而表单相当长。如何重写JavaScript代码,以便它可以检查所有字段?还是必须一个一个地检查? - Zoran
3
这段代码的标题应该只能在自定义 CSS 中工作,或者只能在某些浏览器中工作。我添加了它,但我看不到土耳其语消息。 - Zoran
我已经添加了一个更新版本,应该检查所有的输入、文本区域和选择字段。你在测试哪个浏览器?HTML5表单验证并不被所有浏览器支持。 - janfoeh
只是对于这个代码编辑器的建议,将选择器“change invalid”更改为“change”,这样当规则被满足时,错误就会消失。 - Bogdan M.
2
即使使用fiddle添加'title'到输入中也无法工作 - Vinita Rathore
10
标题属性不再起作用,2018年在Chrome或Firefox上均无效。 - Ahmad Alfy

58

你在oninvalid中忘记了this,请使用以下代码进行更改:

    oninvalid="this.setCustomValidity('Lütfen işaretli yerleri doldurunuz')"

enter image description here

<form><input type="text" name="company_name"  oninvalid="this.setCustomValidity('Lütfen işaretli yerleri doldurunuz')" required /><input type="submit">
</form>


5
很不幸这对我没有起作用。当我试图提交一个空字段时,消息确实出现了,但之后它总是出现,即使我已经填写了该字段。 - Pedro Araujo Jorge
很遗憾,这对我没有起作用。您忘记在标签上添加所需的内容了! - javad shariaty
2
正如@PedroAraujoJorge所说,第一次出现无效输入后,即使输入是有效的,错误消息也会显示。 - faintsignal

16

HTML:

<form id="myform">
    <input id="email" oninvalid="InvalidMsg(this);" name="email" oninput="InvalidMsg(this);"  type="email" required="required" />
    <input type="submit" />
</form>

JAVASCRIPT :

function InvalidMsg(textbox) {
    if (textbox.value == '') {
        textbox.setCustomValidity('Lütfen işaretli yerleri doldurunuz');
    }
    else if (textbox.validity.typeMismatch){
        textbox.setCustomValidity('Lütfen işaretli yere geçerli bir email adresi yazınız.');
    }
    else {
       textbox.setCustomValidity('');
    }
    return true;
}

示例:

http://jsfiddle.net/patelriki13/Sqq8e/4


13

这对我起作用。

<input oninvalid="this.setCustomValidity('custom text on invalid')" onchange="this.setCustomValidity('')" required>

onchange是必须的!


7
我是一位有用的助手,可以为您进行翻译。以下是需要翻译的内容:

我知道这篇文章很旧,但我还是想分享我的经验。

HTML:

<input type="text" placeholder="Username or E-Mail" required data-required-message="E-Mail or Username is Required!">

Javascript(jQuery):

$('input[required]').on('invalid', function() {
    this.setCustomValidity($(this).data("required-message"));
});

这是一个非常简单的示例。我希望这能帮助任何人。


6

TLDR:通常情况下,您不需要更改验证消息,但如果确实需要,请使用以下方式:

<input
    oninvalid="this.setCustomValidity('Your custom message / 您的自定义信息')"
    oninput="this.setCustomValidity('')"
    required="required"
    type="text"
    name="text"
>

验证消息来自于您的浏览器,如果您的浏览器是用英语,则验证消息将为英语,如果您的浏览器是用法语,则验证消息将为法语,以此类推。

如果默认的验证消息对您输入的内容不适用,最简单的解决方案就是将您的自定义消息作为参数传递给setCustomValidity

...
oninvalid="this.setCustomValidity('Your custom message / 您的自定义信息')"
...

这是一个覆盖默认消息的本地输入方法。但现在我们有一个问题,一旦触发了验证,消息将继续显示,即使用户正在输入。因此,为了停止消息的显示,您可以使用 oninput 属性将有效性消息设置为空字符串。

...
oninput="this.setCustomValidity('')"
...

1
@dimitar的解决方案和这个都在我这里(勇敢浏览器)工作,但我更喜欢这个解决方案,因为表单元素上的onchange事件在元素失去焦点时触发,而不是在修改后立即触发(参见http://rakshasingh.weebly.com/blog/what-is-the-difference-between-oninput-and-onchange-events-in-javascript)。 - sianipard
1
这帮了我大忙,其他方法都没用,谢谢 :) - user18203346

3
//Dynamic custome validation on all fields
//add validate-msg attr to all inputs
//add this js code

$("form :input").each(function(){
                    var input = $(this);
                    var msg   = input.attr('validate-msg');
                    input.on('change invalid input', function(){
                        input[0].setCustomValidity('');
                        if(!(input[0].validity.tooLong || input[0].validity.tooShort)){
                            if (! input[0].validity.valid) {
                                input[0].setCustomValidity(msg);
                            }
                        }


                    });
                });

1
对于那些寻求完全本地化其错误消息的失落灵魂,可以参考下面的代码片段。简而言之,您必须切换event.target.validity属性并使用event.target.setCustomValidity(message)覆盖相应的错误消息。如果您只关心空字段情况,就像OP一样,请考虑valueMissing的情况。
请注意,处理程序是以React方式传递的,但其他答案已经介绍了如何在vanilla JS中执行此操作。
有关每个有效状态的含义以及如何实现自定义错误消息,请参见MDN: Validating forms using JavaScript
const handleInvalidForm = (event) => {
    const { patternMismatch,
        tooLong,
        tooShort,
        rangeOverflow,
        rangeUnderflow,
        typeMismatch,
        valid,
        valueMissing } = event.target.validity;

    if (patternMismatch) 
        event.target.setCustomValidity('...');
    else if (tooLong)
        event.target.setCustomValidity('...');
    else if (tooShort)
        event.target.setCustomValidity('...');
    else if (rangeOverflow)
        event.target.setCustomValidity('...');
    else if (rangeUnderflow)
        event.target.setCustomValidity('...');
    else if (typeMismatch)
        event.target.setCustomValidity('...');
    else if (valid)
        event.target.setCustomValidity('...');
    else if (valueMissing)
        event.target.setCustomValidity('...');
}

// ...

<form onSubmit={handleFormSubmit}
      onInvalid={handleInvalidForm}
>
    {emailTextField}
    {passwordTextField}
    {signInButton}
</form>


我不确定表单是否支持onInvalid属性?它是为<input>元素定义的。 - commonpike

1
<input type="text" id="inputName"  placeholder="Enter name"  required  oninvalid="this.setCustomValidity('Your Message')" oninput="this.setCustomValidity('') />

这可以更好地帮助你,更快速、方便和简单。

0
<input type="text" id="inputName"  placeholder="Enter name"  required  oninvalid="this.setCustomValidity('Please Enter your first name')" >

这可以帮助您更加快速、方便和容易。


你需要使用 setInterval 来在例如 1000 毫秒后将有效字符串设置为 ""。否则,输入元素仍然是“无效的”。 - malthe
@malthe setinterval 会一遍又一遍地执行同样的操作,而且我们必须在完成后删除该间隔。 - Shashank Malviya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接