javascript - 为什么在文本框中按回车会触发另一个按钮中的单击事件
问题描述
考虑一下:
const button = document.querySelector('#button');
button.addEventListener('click', e => {
e.preventDefault();
alert("why did this happen?");
});
<form>
<label for="input">L<input type="text" id="input" name="input"></label>
<button id="button">B</button>
</form>
进入文本框并按 Enter。您会看到一个警报,表明按钮的单击事件已被触发。但是为什么会这样呢?我可以理解,输入事件会冒泡到表单并触发提交。preventDefault
防止这种情况。但是按钮与它有什么关系呢?
解决方案
在表单的单个文本框中按 Enter 会通过模拟单击默认提交按钮来触发表单提交。
我认为历史动机是,当人们向提交事件添加点击事件而不考虑人们可能期望 Enter 提交表单时,它仍然有效。
推荐阅读
- c# - WPF - 设置 DataContext 极大地增加了计算时间
- javascript - 检查用户是否对 Google Drive URL 具有“编辑权限”
- python - 如何将一个数字作为输入并在 Python 中打印一个浮点数直到该小数点
- java - iText7 LtvVerification.addVerification 未启用 LTV
- vector - openlayers 5中矢量图层的交互功能
- c# - C# 将两种不同类型的属性序列化为 JSON
- javascript - 为什么在 vuex 存储中推送到数组后未定义数组?
- c - 有效地将可被 3 或 5 整除的数字相加
- python - django 如何显示新添加产品的详细信息页面
- python - 在 Seaborn / Matplotlib 的小提琴图上指定高于和低于中位数的颜色