type为submit的按钮应绑定click事件还是submit事件?
核心结论
表单内type="submit"的提交按钮,核心提交逻辑请统一绑定在<form>元素的submit事件上,不需要单独为提交按钮绑定click事件处理提交逻辑。
具体原因
- 你已经了解
submit事件绑定在form上可以覆盖回车键提交的场景,实际上这个事件天然覆盖了所有合法的表单提交触发路径:鼠标点击表单内任意submit按钮、输入框聚焦时按回车提交、甚至JS手动调用form.submit()触发的提交,全部会触发form绑定的submit事件,一套逻辑就能覆盖所有提交入口,不会漏场景。 - 单独给submit按钮绑定
click处理提交逻辑有明显缺陷:- 你写的选择器存在拼写错误:属性值是
submit不是sumbit,这类拼写错误会直接导致事件绑定失效 - 就算修正拼写,
click事件只能覆盖鼠标点击这个按钮的场景,覆盖不到回车提交、其他提交入口触发的提交,很容易出现逻辑遗漏 - 提交逻辑分散在click事件中,很容易出现默认行为阻止不全、重复提交的bug
- 你写的选择器存在拼写错误:属性值是
正确写法示例
统一在form元素上绑定submit事件处理全量提交逻辑即可:
// 绑定提交处理逻辑,覆盖所有提交触发场景 $('form').on('submit', function(e) { // 首先阻止表单默认的跳转式提交行为 e.preventDefault() // 后续所有提交相关逻辑:表单校验、接口请求、提交成功/失败交互,全部写在这里 })
如果需要做提交按钮本身的专属交互(比如点击后给按钮加loading状态、禁用按钮防止重复点击),可以单独给按钮绑定click事件,但注意核心提交校验、请求发送逻辑不要放在click事件里,还是要收敛到submit事件中统一处理。
另外补充一点:你写的$('form').submit()、$('button[type="sumbit"]').click()是主动触发对应事件的写法,不是绑定事件处理函数的写法,绑定事件需要传入事件处理函数作为参数。
内容的提问来源于stack exchange,提问作者Almir
相关产品推荐
相关产品推荐

