如何从JavaScript函数手动显示HTML验证消息?

bkhjykvo  于 2023-02-18  发布在  Java
关注(0)|答案(4)|浏览(122)

我想知道是否有办法使用JavaScript函数以编程方式显示HTML验证错误。
这对于必须检查电子邮件重复的情况非常有用。例如,某人输入电子邮件,按“提交”按钮,然后必须通知此电子邮件已注册或其他情况。
我知道还有其他显示此类错误的方式,但我希望以与显示验证错误消息(例如,无效电子邮件、空字段等)相同的方式显示它。

JSF中间文件:http://jsfiddle.net/ahmadka/tjXG3/
HTML格式:

<form>
    <input type="email" id="email" placeholder="Enter your email here..." required>
    <button type="submit">Submit</button>
</form>
    
<button id="triggerMsg" onclick="triggerCustomMsg()">Trigger Custom Message</button>

脚本语言:

function triggerCustomMsg()
{
    document.getElementById("email").setCustomValidity("This email is already used");
    
}

上面的代码设置了自定义消息,但它不会自动显示,只有当用户按提交按钮或其他按钮时才会显示。

polhcujo

polhcujo1#

现在你可以使用HTMLFormElement.reportValidity()方法,目前它在除Internet Explorer之外的大多数浏览器中实现(请参阅浏览器兼容性在MDN).它报告有效性错误而不触发submit事件,并且它们以相同的方式显示.

mi7gmzs6

mi7gmzs62#

var applicationForm = document.getElementById("applicationForm");    
if (applicationForm.checkValidity()) {
  applicationForm.submit();
} else {
  applicationForm.reportValidity();
}

reportValidity()方法将触发HTML5验证消息。

6mw9ycah

6mw9ycah3#

这个问题是问了一年多前,但这是一个很好的问题,我最近遇到的,以及...
我的解决方案是使用JavaScript在每个包含validationMessage的<input><select><textarea><label>上创建一个属性(我使用"data-invalid")。
然后一些CSS ...

label:after {
    content: attr(data-invalid);
   ...
}

...显示错误消息。

    • 限制**

这只在每个元素都有标签的情况下才有效,如果你把属性放在元素本身上就无效了,因为<input>元素不能有:after伪元素。

    • 演示**

http://jsfiddle.net/u4ca6kvm/2/

hjzp0vay

hjzp0vay4#

正如@Diego所教导的,你可以使用form.reportValidity();
要支持IE和Safari包括这个polyfill,它只是工作:

if (!HTMLFormElement.prototype.reportValidity) {
    HTMLFormElement.prototype.reportValidity = function() {
      if (this.checkValidity()) return true;
      var btn = document.createElement('button');
      this.appendChild(btn);
      btn.click();
      this.removeChild(btn);
      return false;
    }
}

相关问题