jQuery绑定#frmNotification表单提交事件首次点击无反应该如何解决?
问题触发原因
- jQuery Validate 插件的
validate()方法是初始化方法,作用仅为给目标表单绑定校验规则、注册提交回调,不会主动触发本次的提交校验流程。你当前的代码将validate()初始化逻辑放在了submit事件的回调中,第一次点击提交按钮时仅完成了插件初始化,不会执行submitHandler里的AJAX提交逻辑,因此第一次点击无响应。 - 第二次点击提交按钮时,表单已经完成了Validate插件的初始化,插件监听到submit事件后会自动执行已经注册的
submitHandler逻辑,因此第二次点击才会生效。 - 额外问题:自定义submit事件监听与Validate内置的submit监听逻辑耦合,也是导致时序异常的原因之一。
修复方案
按照Validate插件的设计逻辑,将校验初始化提前到页面加载完成阶段执行,不要放在submit事件回调中,调整后的代码如下:
// 页面DOM加载完成后直接初始化表单校验 $(function() { $('#frmNotification').validate({ submitHandler: function(form) { // 自定义前置校验逻辑放在此处,或者整合到Validate的自定义校验规则中 var results = checkForm(form); if (results) { $.ajax({ url: form.action, type: form.method, data: $(form).serialize(), success: function(response) { Swal.fire({ type: "info", text: response, confirmButtonClass: "btn btn-confirm mt-2" }); } }); } } }); });
调整后无需再额外绑定自定义的submit事件监听,也不需要手动调用e.preventDefault(),Validate插件会自动阻止表单默认提交行为。
内容的提问来源于stack exchange,提问作者Jones
相关产品推荐
相关产品推荐

