如何捕获包含多个表单的页面上按下的回车键?

2024-01-30

我继承了一个网络应用程序,其中在任何输入字段中按回车键的通常功能已被禁用,因为页面包含多个表单,并且应用程序将无法确定(或者,所以我被告知) 采取哪种形式采取行动。该应用程序的设计没有提交按钮(如输入类型=“提交”),相反,设计者采用了 onclick 处理。以下是在其中一页上定义的两个按钮,仅供说明之用

<input type="button" value="LOGIN"  name="btnLoginOk" onclick="submit(); />"

<input type="button" class="button-click-grey" value="Find Link Partners"  
    onclick="raiseEvent('SubmitForm','',this);" style="cursor:pointer;" />

但我真的希望能够允许用户按回车键(如果他们愿意的话)。如果他们刚刚在与登录相关的字段中输入内容,则检测到该内容并执行 onclick="submit();"

或许 jQuery 有一个解决方案。


页面包含多个表单,并且 应用程序将无法 确定(或者,据我所知)哪个 形式到行动。

当您在输入控件上按 Enter 时,浏览器会寻找第一个提交按钮以那种形式并模拟点击它。在有多个按钮的情况下,将在键盘输入时按下第一个按钮(这绝不是一成不变的,浏览器可能会偏离这一点)。

如果您有两种形式,则按下按键的形式将具有it's首先按下提交按钮。因此,您实际上不需要对此进行任何特殊处理。你只需要停止妨碍。

您可以在表单上用代码模拟这一点:

 $( 'form' ).bind('keypress', function(e){
   if ( e.keyCode == 13 ) {
     $( this ).find( 'input[type=submit]:first' ).click();
   }
 });

或窗口(用于演示大致发生的情况):

 $( window ).bind('keypress', function(e){
   if ( $( e.originalTarget ).is( ':input' ) && e.keyCode == 13 ) {
     $(  e.originalTarget )
       .closest( 'form' )
         .find( 'input[type=submit]:first' )
           .click();
   }
 });

当然假设.preventDefault()尚未被召集参加该活动。

底线:如果你有事件,你可以从中推测它来自什么元素,从而推断它属于哪种形式。即使在这种情况下:

<input type="button" value="LOGIN" name="btnLoginOk" onclick="submit();">

Here submit()是一个全局函数,但是当它被调用时,它的上下文(this) 将是元素,你可以这样做submit(e){ this.form.submit(); }.

该应用程序的设计没有提交按钮(如输入 type="submit"),相反,设计者采用了 onclick 处理。

在我看来,设计师并没有完全理解 DOM / 表单事件,并且正在绕着问题走很长的路。另一个可能的原因可能是该程序很旧,并且是在这些东西不像今天那样稳定或没有正确记录的时候设计的。

替换这个:

<form action="/login/" method="POST">
  [...]
  <input type="button" value="LOGIN" name="btnLoginOk" onclick="submit();">
</form>

有了这个:

<form action="/login/" method="POST">
  [...]
  <input type="submit" value="LOGIN" name="btnLoginOk">
</form>

然后向所有需要它的表单添加一个键处理程序,如果满足某些条件,该处理程序会检测并抑制输入(对于您实际上想要禁用此功能的表单)。

// for all forms that POST that have 2+ submit buttons
$( 'form[method=post]:has(:submit:eq(1))' ).bind('keydown', function(e){
  // if target is an enter key, input element, and not a button
  if ( e.keyCode == 13 && e.target.tagName == 'INPUT' && 
       !/^(button|reset|submit)$/i.test( e.target.type ) ) {
    return false;  // kill event
  }
});

或者更好的是:使用知道如何为您执行此操作的表单验证库(或 jQuery 插件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何捕获包含多个表单的页面上按下的回车键? 的相关文章

  • 如何在 Jquery 中设置 cookie 在 1 分钟或 30 秒后过期?

    如何将 cookie 设置为在 30 秒或 1 m 后过期 这是我的代码 cookie username username expires 14 expires after 14 days 1 分钟内 您可以使用 var date new
  • JavaScript 数组 every 和 some 之间的区别

    我看到在给定的测试中两者都返回 true 或 false https developer mozilla org en US docs Web JavaScript Reference Global Objects Array some h
  • NestJS:使用 JWT 将验证选项添加到 AuthGuard

    我正在尝试利用AuthGuard装饰器和护照 JWT 策略 遵循文档 https docs nestjs com techniques authentication 文档中的所有内容都运行良好 但我现在想保护 JWT 中包含的范围的路由 这
  • 使用多种颜色来突出显示

    我有这个示例代码来突出显示表格的特定单元格 有没有办法切换颜色或同时使用多种颜色 我需要在这里实现两件事 1 我希望能够在单击参数组 或单独的参数 之前将其颜色设置为前端的某种颜色 最多 5 种颜色就足够了 2 参数选择哪种颜色并不重要 颜
  • JQuery 安全问题 - 链接操作(基于 DOM)

    BURP 套件发现存在链接操作 基于 DOM 问题 jquery 3 3 1 js 问题出在代码中 用于解析文档来源的锚标记 originAnchor document createElement a originAnchor href 位
  • jquery菜单栏浮动顶部

    我试图使菜单栏不断浮动在浏览器的顶部 因此当他们向下滚动页面时 菜单栏仍位于顶部 我该怎么做呢 Regards CSS 标签position fixed 即使滚动 也会使其保持在屏幕上的同一位置 使用它 然后将其定位为top right b
  • NodeJS 中的 uglify-js“找不到模块”

    在这里我正在创建应用程序来压缩 javascript 文件 我所做的步骤 在我的本地机器上安装了nodeJS 检查节点和 npm 正在工作 通过 npm install uglify js g 安装 uglify js 并安装 当我尝试在命
  • 在TestCafé测试中注入的injectScripts中的脚本在哪里?

    我正在以编程方式设置 TestCaf 测试 并且使用injectScripts配置上Runner类来注入函数 根据文档 这些脚本被添加到测试页面的标题中 是否可以从测试本身调用函数 我还没有找到办法做到这一点 我可以看到脚本映射在测试中是可
  • 无法解构“undefined”或“null”的属性“user”

    使用 redux 检索用户信息时出错 我想从数据库获取用户信息 姓名 密码和头像地址 然后对其进行编辑 我正在使用nodejs express react redux 和jwt Actions user js import axios fr
  • 如何在javascript中解压二进制文件?

    我正在尝试将一些现有代码从 python 移植到 javascript 并且不确定如何处理以下行 var1 var2 struct unpack
  • jQuery - 动画可折叠 DIV,向上滑动?

    我使用这个 jQuery 脚本来设置 div 的动画 以便在用户单击按钮时打开 关闭 http www dynamicdrive com dynamicindex17 animatedcollapse htm http www dynami
  • 关闭弹出窗口后重新加载父页面

    我试图让用户通过弹出窗口登录 当他们单击弹出窗口的链接 这是一个 php 变量 时 他们可以登录 当窗口关闭时 我希望它重新加载他们最初所在的页面 父页面 这是signin php页面上的代码 但这所做的只是使登录页面成为用户所在的页面 我
  • jQuery:根据鼠标位置移动的全屏“背景”图像[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试实现一个根据鼠标位置移动的全屏背景 例如 如果您将鼠标移动到左上角 视口将显示图像的左上角以
  • 单击按钮滚动到特定 div

    我有一个具有固定菜单和内容框 div 的页面 单击菜单时 内容框滚动到特定 div 到目前为止 一切都很好 这是这里的示例 https jsfiddle net ezrinn 8cdjsmb9 11 https jsfiddle net e
  • 如何将函数绑定到DOM事件一次且仅一次,以便在事件触发时不会再次执行?

    所以我有以下形式的锚标签 a href link 我在页面加载时应用以下内容 我的意思是 文档准备就绪 jQuery a rel Tab click function e e preventDefault then I do some st
  • AngularJs:当放置在 ng-view 标签内时,ng-include 不起作用

    我正在通过 ng view 内的角度路线加载 html 页面 我正在加载的页面包含一个 ng include 标签 指向 另一个 html 文件 我尝试了以下所有语法 div src div div div div src include
  • 删除已从另一个下拉菜单中选择的下拉值

    我在网上搜索了一段时间 但仍然找不到答案 我的网站上有三个下拉菜单 我使用它们来接受用户首选项 以便用户可以控制结果的输出 所以我想知道如果在其中一个下拉列表中选择了该值 是否可以从其他两个下拉列表中取出该值 例如 如果用户在第一个电影中选
  • Google 地图 v3 信息窗口在地图视口外打开

    如果单击地图视口顶部附近的标记 信息窗口将加载到可视区域之外 并且必须拖动地图才能查看信息窗口内容 理想情况下 我不希望地图自动平移 有没有办法以不同的方向加载信息窗口 例如如果标记位于视口的顶部 则以向下的方向显示信息窗口 不 你不能以不
  • 如何对数字进行排序? [复制]

    这个问题在这里已经有答案了 下面是代码 Is the sortNumber对数字进行排序的函数 a 和 b 是什么意思以及为什么存在 为什么sortNumber in n sort sortNumber 没有指定任何参数a and b Ja
  • 当页面加载图像时,它是只加载一次,还是每次在标记中找到它时加载?

    当页面加载图像时 它是只加载一次 还是每次在标记中找到它时加载 那么 jquery 呢 附加一个 img 会导致它再次重新加载吗 我问这个问题是因为我有高分辨率图像 但需要在标记的许多情况下使用它 img src hello jpg img

随机推荐