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

未输入内容时如何触发Bootstrap表单校验事件 直接提交不调用自定义校验怎么办

问题根因

你遇到的问题由两个原因导致:

  • 产品名称输入框没有添加required属性,空值提交时原生校验会直接判定为有效,不会触发你自定义的校验规则
  • 自定义的isValidString校验仅绑定了input事件,表单提交时没有主动触发执行
解决方案

按以下步骤修改即可实现全场景校验:

  1. 给产品名称输入框新增required属性,先保证必填校验生效
  2. 将产品名称的校验逻辑抽成公共函数,在表单提交时主动调用
  3. (可选)新增blur失焦事件监听,用户离开输入框时也触发校验,提升使用体验
完整修改代码

HTML部分

<form
    action="/products/addProduct"
    enctype="multipart/form-data"
    class="needs-validation"
    novalidate
    method="post"
>
    <div class="col-md-12 position-relative">
        <label for="productName" class="form-label">产品名称</label>
        <!-- 新增required必填属性 -->
        <input
            type="text"
            name="productName"
            id="productName"
            class="form-control"
            required
        />
        <div class="invalid-feedback">
            请输入合法的产品名称(至少2个字符,不允许包含特殊字符)
        </div>
    </div>
    <div>
        <button type="submit" id="savebutton" name="Submit">
            创建
        </button>
    </div>
</form>

JS部分

let forms = document.querySelectorAll(".needs-validation");
const productNameField = document.getElementById("productName");

// 抽离公共的产品名称校验函数
function validateProductName() {
    const val = productNameField.value;
    if (!isValidString(val)) {
        productNameField.setCustomValidity("不合法");
    } else {
        productNameField.setCustomValidity("");
    }
}

// 输入时触发校验
productNameField.addEventListener("input", validateProductName);
// 可选:失焦时触发校验
productNameField.addEventListener("blur", validateProductName);

Array.prototype.slice.call(forms).forEach(function (form) {
    form.addEventListener(
        "submit",
        function (event) {
            // 提交表单前主动执行一次产品名称校验
            validateProductName();
            if (!form.checkValidity()) {
                console.log("校验不通过");
                event.preventDefault();
                event.stopPropagation();
            }
            console.log("执行校验");
            form.classList.add("was-validated");
        },
        false
    );
});
效果说明

修改后无论你是输入过程中、离开输入框还是未输入任何内容直接点击提交按钮,都会执行isValidString自定义校验,Bootstrap原生的invalid-feedback错误提示会正常触发展示。

内容的提问来源于stack exchange,提问作者Leo Baby Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:06:04