表单外的哪些内容可能会破坏隐式表单提交(Enter 键)?

What content outside a form might break implicit form submission (Enter key)?

我已将这个简单的搜索表单添加到数据库 Web 应用程序的菜单区域:

<form action='list.php'>
  <input name='textinput1' placeholder='"._('(quick search)')."' style='width:7em'>
  <input type='hidden' name='texttarget1' value='Name'>
</form>

它适用于大多数页面,但在两个页面上,按 Enter 键不起作用。您可以在 https://missiondemo.kizunadb.com(一个空的演示实例)中试用 - 使用 "demo"/"demo" 登录。菜单栏搜索表单不会提交的两个页面是 "New Person/Org"(一个大编辑表单)和 "DB Settings"(一堆小表单和 AJAX 的位)。

所有页面上的搜索表单都完全相同,因此显然这些页面上的其他内容正在影响搜索表单的行为,这在我看来不太可能。有什么想法可以做到这一点,以及如何处理它吗?

就是这些行:

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}
document.onkeypress = stopRKey;

如果 keyCode 为 13 (Enter),您将监听所有按键并返回 false,这会阻止默认行为,在本例中为提交表单

重要的是,我是如何发现问题的:

  • 转到一个正在运行的页面,然后打开 Chrome DevTools
  • 在“元素”选项卡上,选择输入元素
  • 查看 'Event Listeners' 选项卡,发现没有与键盘事件相关的内容
  • 转到其中一个损坏的页面并重复该过程
  • 这次在 'Event Listeners' 选项卡上看到了更多的事件侦听器,其中包括 keypress
  • 展开 keypress 侦听器,您会看到侦听器已附加到 document,它会告诉您与侦听器关联的代码的文件和行号。