首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

jQuery submit() 不生效?因為 validate 插件攔截了提交——改用 DOM 原生 submit()

     編輯:程式設計疑難解答

現象

綁定 click 事件執行 c.submit()(c 為 jQuery 對象),表單不提交,無網絡請求,但 action/method 已正確設置。

根因

  • jQuery.fn.submit() 會觸發 jQuery 內部的 submit 事件流程。
  • 項目引入 jquery.validate,該插件在 submit 事件中攔截並驗證表單;驗證不通過時 return false 取消提交。
  • 此時表單可能已通過驗證,但插件還有其他邏輯(如 submitHandler)導致流程偏離。

解決方案

// ❌ 錯誤
c.submit();

// ✅ 正確:繞過 jQuery 事件體系,直接調用 DOM 原生 submit()
c[0].submit();   // c 是 jQuery 對象,c[0] 是原生 HTMLFormElement

原理對比

調用方式是否觸發 jQuery submit 事件是否經過 validate 驗證
$(form).submit()是是(可能被攔截)
form.submit() / form[0].submit()否否(直接提交)

最佳實踐建議

  1. 優先走 validate 的 submitHandler 統一提交邏輯,保持驗證與提交一致。
  2. 確需繞過驗證(如導出、下載),才用 form[0].submit()。
  3. 避免同一表單同時綁定 click 手動提交與 validate 自動提交,雙重綁定極易產生競態。
  4. 理解 jQuery submit() 與 DOM submit() 的本質區別,一鍵解決「驗證通過卻提交不了」的疑難雜症。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved