You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化代码为两个表单输入字段添加onvalid属性?

问题分析与修复方案

错误点说明

  • 操作对象错误:document.querySelectorAll()返回的是NodeList元素集合,你在循环里直接调用addAttribute.setAttribute(),这是在操作集合本身而非集合里的单个元素,应该用addAttribute[i]访问每个元素。
  • 事件名拼写错误:表单验证的触发事件是oninvalid,不是onvalid,拼写错误导致事件无法被正确触发。

修复后的代码

方案1:修正原循环写法

const inputFields = document.querySelectorAll("#form-field-name, #form-field-escort");
for (let i = 0; i < inputFields.length; i++) {
    inputFields[i].setAttribute("oninvalid", "this.setCustomValidity('Bitte füllen Sie dieses Feld aus.');");
    // 补充:输入时重置自定义验证信息,避免触发错误后输入正确内容仍提示错误
    inputFields[i].setAttribute("oninput", "this.setCustomValidity('');");
}

方案2:更现代的事件监听器写法(推荐)

const inputFields = document.querySelectorAll("#form-field-name, #form-field-escort");
inputFields.forEach(field => {
    field.addEventListener('invalid', function() {
        this.setCustomValidity('Bitte füllen Sie dieses Feld aus.');
    });
    // 重置验证信息
    field.addEventListener('input', function() {
        this.setCustomValidity('');
    });
});

补充说明

一旦通过setCustomValidity设置了错误信息,浏览器会持续认为该字段无效,直到调用setCustomValidity('')清空信息,所以必须添加input事件处理,保证用户输入正确内容后能正常提交表单。

内容的提问来源于stack exchange,提问作者leon_505

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:01:20