【问题标题】:Click closest submit button when any 'enter' key event occurs on any input field当任何输入字段上发生任何“输入”键事件时,单击最近的提交按钮
【发布时间】:2011-10-01 08:50:07
【问题描述】:

我在页面上有多个提交按钮。我想要的是,如果用户在任何输入字段上按下回车键,它应该单击相关的提交按钮。我尝试了下面的方法,但它甚至无法捕捉输入字段上的按键。

提前致谢,

$('* input').keypress(function (e) {

      if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
            $(this).closest('input[type=submit]').click();

      }
});

【问题讨论】:

  • 为什么要捕获Enter 键?如果在输入字段中的任何位置按下它,textareas 除外,它将提交该特定表单。
  • 只要它在表单元素中(我猜是这样,因为您使用的是提交按钮),如果在输入字段中按下输入,它将自行提交.试试this
  • 必须同意 Shef,如果您的 HTML/表单结构正确,您将始终发送适当的提交 - 没有表单就没有提交/输入!
  • @Shef 我有一个父表单和多个提交按钮。所以这就是问题所在。
  • @Kaplan 如果您有一个父表单,那么无论您单击哪个提交按钮,都只会有一个提交的表单(父表单)。因此,不要试图抓住任何回车键,只要按回车键就可以提交表单。

标签: javascript jquery


【解决方案1】:

试试这个。 .closest() 将不起作用,除非提交按钮位于 DOM 树的上方。相反,您可以在输入的 parentNode 中搜索它,或者只提交表单(但您可能没有表单元素,否则这将是 enter 键的默认行为)。

$(document).ready(function() {
    $('input[type="text"], input[type="password"]').keypress(function (event) {
        if (event.keyCode == '13') { //jquery normalizes the keycode 

            event.preventDefault(); //avoids default action
            $(this).parent().find('input[type="submit"]').trigger('click');
            // or $(this).closest('form').submit();
        }
    });
});

【讨论】:

  • 我发现这最适合作为代码的最后一行而不是 findclosest: $(this).next('input[type=submit]').trigger('click');
【解决方案2】:

根本不需要javascript!

Enter 键将按标准称为“隐式提交”。当表单中有多个 input[type=submit] 时,第一个将被 Enter 隐式“点击”。所以,你应该把默认按钮放在第一个。
如果要交换一些按钮,请使用 CSS 规则。

关于按钮和 Enter 键的一些有趣事实是 here

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多