单页应用表单提交致路由变更问题排查(已加return false)
问题原因分析
核心问题出在事件绑定的时机上:
要是你直接在DOM还没加载完成的情况下绑定表单提交事件,此时页面里的表单元素还没被浏览器解析渲染到DOM树中,你的事件绑定代码相当于“绑定到了不存在的元素上”,根本没生效。这种情况下,点击提交按钮时,浏览器会执行表单的默认提交行为——也就是跳转路由,而你写的
send_mail函数里的return false根本没机会执行,自然拦不住跳转。把事件绑定代码放进
DOMContentLoaded监听内时,这个事件会在浏览器完全加载并解析完DOM之后才触发,此时表单元素已经存在,事件能成功绑定到表单上。点击提交时,send_mail函数正常执行,return false也能顺利阻止表单的默认提交行为,路由也就不会变更了。
额外提一句:除了用return false,你也可以在事件处理函数里调用event.preventDefault()来阻止默认行为,效果一致,有时候这种写法逻辑更清晰。
内容的提问来源于stack exchange,提问作者Aarav Kumar
相关产品推荐
相关产品推荐

