在 HTML 表单提交上制作 Enter 键而不是激活按钮

Posted

技术标签:

【中文标题】在 HTML 表单提交上制作 Enter 键而不是激活按钮【英文标题】:Making Enter key on an HTML form submit instead of activating button 【发布时间】:2012-01-07 19:56:19 【问题描述】:

我有一个带有单个 submit 输入的 html 表单,还有各种 button 元素。当用户按下“输入”键时,我希望它实际提交表单,但相反(至少在 Chrome 15 中)我发现它触发了第一个 button(因为它发生在 HTML 的早期比submit 输入,我猜)。

我知道通常你不能强迫浏览器偏爱特定的submit 输入,但我真的认为他们会偏爱submit 输入而不是button 元素。我可以对 HTML 进行一些小调整以使其工作,还是我必须采用某种 javascript 方法?

这是 HTML 的粗略模型:

<form action="form.php" method="POST">
    <input type="text" name="field1"/>
    <button onclick="return myFunc1()">Button 1</button>
    <input type="submit" name="go" value="Submit"/>
</form>

【问题讨论】:

检查这个问题:***.com/a/925387/1031900 @OfirFarchy 我想我认为这个问题的不同之处在于只有一个提交,其他都是按钮。 好吧,如果您不反对使用 JS 和 jQuery,请查看我和大卫的答案 【参考方案1】:
$("form#submit input").on('keypress',function(event) 
  event.preventDefault();
  if (event.which === 13) 
    $('button.submit').trigger('click');
  
);

【讨论】:

【参考方案2】:

我只是遇到了这个问题。将input 更改为button 导致我的失败,而且我的/&gt; 标记终止符写得不好:

所以我有:

<button name="submit_login" type="submit" class="login" />Login</button>

并且刚刚将其修改为:

<button name="submit_login" type="submit" class="login">Login</button>

现在就像一个魅力,总是烦人的小东西...... HTH

【讨论】:

【参考方案3】:

试试这个,如果按下回车键,你可以像这样捕获它,例如,我前几天开发了一个答案html button specify selected,看看这是否有帮助。

指定表单名称,例如yourFormName,那么您应该能够提交表单而无需关注表单。

document.onkeypress = keyPress;

function keyPress(e)
  var x = e || window.event;
  var key = (x.keyCode || x.which);
  if(key == 13 || key == 3)
   //  myFunc1();
   document.yourFormName.submit();
  

【讨论】:

如果表单有更多提交按钮,这将有所帮助: document.getElementById("submit").click(); 这是一种绕过 HTML 中默认行为的钝方法。请参阅above answer 了解原因。【参考方案4】:

我刚刚在 Chrome、Firefox 和 IE10 中试了一下。

如上所述 - 确保您已使用 type = "button"、"reset"、"submit" 等进行标记,以确保其正确级联并选择正确的按钮。

也许还可以将它们全部设置为具有相同的形式(即所有对我有用的形式)

【讨论】:

【参考方案5】:

您不需要 JavaScript 来选择您的默认提交按钮或输入。您只需用type="submit" 标记它,其他按钮用type="button" 标记它们。在您的示例中:

<button type="button" onclick="return myFunc1()">Button 1</button>
<input type="submit" name="go" value="Submit"/>

【讨论】:

这实际上在某些浏览器中无法正常工作。我今天刚遇到这个问题,认为 type="submit" 会使其成为默认值,但它不会在 Chrome 或 Safari 中。 它适用于我的 Chrome 和 Safari。它一定是别的东西。 在额外的按钮上设置 type="button" 和设置 type="submit" 是有区别的。 不设置type="button"不起作用的原因是默认情况下,按钮元素是type="submit"。所以问题中只有一个提交按钮的前提实际上是不正确的。【参考方案6】:

鉴于只有一个(或者此解决方案可能甚至没有一个)提交按钮,这里是基于 jQuery 的解决方案,适用于同一页面上的多个表单...

<script type="text/javascript">
    $(document).ready(function () 

        var makeAllFormSubmitOnEnter = function () 
            $('form input, form select').live('keypress', function (e) 
                if (e.which && e.which == 13) 
                    $(this).parents('form').submit();
                    return false;
                 else 
                    return true;
                
            );
        ;

        makeAllFormSubmitOnEnter();
    );
</script>

【讨论】:

【参考方案7】:

你可以使用jQuery:

$(function() 
    $("form input").keypress(function (e) 
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) 
            $('button[type=submit] .default').click();
            return false;
         else 
            return true;
        
    );
);

【讨论】:

因为这是公认的答案:向下滚动以获得非常简单的纯 HTML 解决方案。 HTML 解决方案是正确答案。浏览器默认处理 我知道这是一个旧答案,但您不需要使用这种“重型设备”来解决这个问题。使用仅 HTML 的解决方案(@Jesús Carrera 的回答),浏览器现在处理这个问题。 这种方法的好处——虽然是的,它确实需要 jQuery/JavaScript——即使你需要在表单中有多个提交按钮,它也可以工作。但是,此示例中的特定选择器不应在 button[type=submit] 之后有空格,假设您已使用 default css 类标记了默认提交按钮。

以上是关于在 HTML 表单提交上制作 Enter 键而不是激活按钮的主要内容,如果未能解决你的问题,请参考以下文章

html表单在特定输入上按Enter键时阻止提交[重复]

按Enter键后Form表单自动提交的问题

通过在 struts-dojo 自动完成上按 enter 键来防止表单提交

HTML 表单上的默认提交按钮是如何确定的?

将换行符添加到 textarea 而不是提交表单

仅在 _some 字段上通过 Enter 键禁用表单提交