input的change事件是否必然先于form的submit事件触发?主流浏览器是否一致?
Input的change事件是否一定会在form的submit事件之前触发?
是的,在所有主流浏览器中,input的change事件都会优先于form的submit事件触发,这种行为不是偶然的测试结果,而是有HTML规范作为保障的。
具体触发顺序解析
当你点击表单的submit按钮提交表单时,浏览器会按照以下固定顺序触发相关事件:
- 首先,当前聚焦的input元素会触发
blur事件(因为点击submit按钮会让输入框失去焦点)。 - 如果该input元素的值在聚焦状态下发生了修改,
blur事件之后会立即触发change事件。 - 接着触发submit按钮的
click事件。 - 最后才会触发form的
submit事件。
对应你提供的代码例子:
<form id="myform" action="http://google.com/"> Your Email: <input type="email" id="email"> <input type="submit" name=""> </form>
当你在#email输入框中修改内容后直接点击submit按钮,#email的change事件必然会在#myform的submit事件之前触发——这是所有主流浏览器(Chrome、Firefox、Safari、Edge)都严格遵循的行为。
特殊情况补充
如果是通过JavaScript代码直接调用form.submit()方法提交表单,此时不会触发submit按钮的click事件,而且如果input元素还处于聚焦状态且值已修改,因为没有触发blur事件,所以change事件不会触发。但这种场景和你测试的“点击submit按钮提交”是完全不同的情况。
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

