背景
今天测试给我提了一个bug, 在只有一个inpu的表单中按回车会触发页面刷新,并且提交事件并没有触发, 因为这个项目刚刚接手, 代码不是我写的, 所以我第一个想到的是原来的开发给form添加了键盘事件, 或者给form添加了submit事件.
解决
经过排查代码后发现, form表单中并没有写特殊的事件, 并且bug呈现页面刷新状态, 所以我推断为没有阻止默认的form提交事件.
给form标签中添加@keypress.enter.prevent.stop.native='()=>false'
(有点不太放心, 所以在阻止默认事件之后又return了false), 果然问题得到了解决.
但是又引发了思考, 为什么在只有一个input并且button的type不为submit的时候会触发表单默认提交事件呢?
查阅资料后了解到
- 如果表单里有一个type=”submit”的按钮,回车键生效。
- 如果表单里只有一个type=”text”的input,不管按钮是什么type,回车键生效。
- 如果按钮不是用input,而是用button,并且没有加type,IE下默认为type=button,FX默认为type=submit。
- 其他表单元素如textarea、select不影响,radio checkbox不影响触发规则,但本身在FX下会响应回车键,在IE下不响应。
- type=”image”的input,效果等同于type=”submit”,不知道为什么会设计这样一种type,不推荐使用,应该用CSS添加背景图合适些
更新, 去网上找了很多地方都没找到上方说法的出处, 看了看有类似文章的博主几乎都是10年前发的博文了, 就没有去打扰人家, 所以只找到一个html标准的介绍
html form标签标准–form隐式提交和提交算法