javascript - 防止 "enter"按键表单提交但不选择数据列表

标签 javascript html firefox dom-events

一个真正的极端案例。我有一个与此类似的 HTML 表单:

<html>
<script>
function captureEnter(e) {
  if (e.keyCode == 13) {
    e.preventDefault();
  }
}
</script>
<form>
<datalist id="some-data">
  <option value="option 1">option 1</option>
  <option value="option 2">option 2</option>
  <option value="option 3">option 3</option>
  <option value="option 4">option 4</option>
</datalist>
<input list="some-data" name="hello" onkeydown="captureEnter" />
</form>
</html>

你可以试试这个fiddle .

在 Firefox 上,有什么方法可以区分以下事件:

  1. 当您聚焦文本字段时按Enter;和
  2. 在数据列表中选择选项时按Enter

如果用户正在进行文本输入并意外按下 Enter,我想阻止表单提交。我的代码可以工作,但现在它还阻止用户使用 Enter 选择数据列表选项。

Chrome 没有这个问题,但我也需要它在 Firefox 上运行。

最佳答案

我的最终解决方案:https://jsfiddle.net/yookoala/ya3pcuLd/

它的Javascript:

document.getElementById("input").onkeydown = function(e) {
  if ((e.keyCode == 13) && (typeof this.form != "undefined")) {
    // get the element's parent form object
    // capture the parent form submit event and supress it
    this.form.addEventListener('submit', function (e) {
      e.preventDefault();
    }, {"once": true});
  }
}

这将在按下“Enter”键后立即捕获提交事件。但不影响数据列表选择时的“Enter”键。

关于javascript - 防止 "enter"按键表单提交但不选择数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43184088/

相关文章:

javascript - 内容安全策略错误,没有任何内联 JavaScript

javascript - 如何判断多个div是否有嵌套标签

html - 等待 jQuery ajax 响应完成页面更新,然后再允许另一个 ajax 调用

javascript - 如何在 Firefox 插件中创建 splitmenu

html - 显示 : inline-block containing image and text does not shrink-to-fit correctly in Firefox 的 DIV

javascript - 使用 json 将值传递到文本框

javascript - 如何查看窗口的 Javascript 窗口 ID?用于 Selenium select_window()

html - 为什么我的页面不可滚动?

javascript - 如何使 flexbox 元素填充剩余空间并滚动?

Python - Firefox headless (headless)