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

时间:2019-05-02 14:13:35

标签: html forms form-submit enter

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

//Code which needs to mock

List<list> li = new List<list>();

query = "some query as input";
using (SqlDataReader sqlDataReader = databaseWrapper.ExecuteReader(query, null))
{
    if (sqlDataReader != null)
    {
        if (sqlDataReader.HasRows)
        {
            while (sqlDataReader.Read())
            {
                R1 rm = new R1
                {
                    r3 = Convert.ToString(sqlDataReader["Name"]),
                    r4 = Convert.ToInt32(sqlDataReader["Id"])
                };
                li.Add(rm);
            }
        }

        rR.li = li;
        return rR;
    }
}

它在大多数页面上都有效,但是在两页上,按Enter键无济于事。您可以在https://missiondemo.kizunadb.com(一个空的演示实例)上进行尝试-使用“ demo” /“ demo”登录。菜单栏搜索表单不会提交的两个页面是“ New Person / Org”(一个大的编辑表单)和“ DB Settings”(一堆小表格和少量的AJAX)。

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

1 个答案:

答案 0 :(得分:1)

是这些行:

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
  • 在“元素”选项卡上,选择输入元素
  • 在“事件监听器”选项卡上,发现与键盘事件没有任何关系
  • 转到破碎的页面之一并重复该过程
  • 这次,在“事件监听器”选项卡上看到了更多的事件监听器,其中包括keypress的一个事件监听器
  • 展开keypress侦听器,您将看到该侦听器已附加到document,并告诉您与该侦听器关联的代码的文件和行号。