使HTML表单上的Enter键提交而不是激活按钮


80

我有一个带有单个submit输入的HTML表单,但也包含各种button元素。当用户按下“ enter”键时,我希望它实际提交表单,但是(至少在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>


1
@OfirFarchy我想我使这个问题与众不同的是,只有一个提交,其他都是按钮。
andygeers

好吧,如果您不反对使用JS和jQuery,请查看我和大卫的答案
Ofir Farchy 2011年

Answers:


141

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

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

4
实际上,这在某些浏览器中无法正常工作。我今天刚遇到这个问题,认为type =“ submit”将其设置为默认值,但是在Chrome或Safari中却没有。
本·戴维斯

5
它适用于Chrome和Safari。一定是别的东西。
耶苏斯·卡雷拉

15
设置额外按钮上的type =“ button”和设置type =“ submit”的区别就在于此。
亚历克斯(Alex)

21
如果未设置,则无法使用的原因type="button"是,默认情况下,按钮元素为type="submit"。因此,只有一个提交按钮这一问题的前提实际上是错误的。
Elezar '16

30

您可以使用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;
        }
    });
});

14
由于这是公认的答案:请向下滚动以获取非常简单的纯HTML解决方案。
jlh

2
HTML解决方案是正确的答案。默认情况下,浏览器会处理
Edward Newsome

我知道这是一个旧答案,但是您无需使用此“重型设备”即可解决此问题。使用仅HTML解决方案(@JesúsCarrera的答案),浏览器现在可以处理。
Martijn Luyckx '18年

1
这种方法的好处-尽管是的,但确实需要jQuery / JavaScript-即使您的表单中需要有多个提交按钮,该方法仍然可以使用。button[type=submit]但是,假设您已使用defaultcss类标记了默认的提交按钮,则此示例中的特定选择器不应在空格之后。
Christopher King

4

试试这个,如果按下回车键,您可以像这样捕获它,例如,我开发了一个答案,那天html按钮指定为select,看看是否有帮助。

指定表单名称,例如,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();
  }
}

如果表单具有更多提交按钮,则将有帮助:<input type =“ submit” id =“ submit” value =“ ok” /> document.getElementById(“ submit”)。click();
Muflix 2013年

这是解决HTML中默认行为的一种钝方式。有关原因,请参见上面的答案
alttag 16-10-12

4
$("form#submit input").on('keypress',function(event) {
  event.preventDefault();
  if (event.which === 13) {
    $('button.submit').trigger('click');
  }
});

3

我只是遇到了一个问题。我的从将inputa更改为a是一个落差,button而我的/>标签终止符写得不好:

所以我有:

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

并将其修改为:

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

现在就像魅力一样,总是烦人的小事... HTH


2

鉴于只有一个(或使用该解决方案甚至可能没有一个)提交按钮,这是基于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>

1

我只是在Chrome,Firefox和IE10中进行了旋转。

如上所述-确保已使用类型=“ button”,“ reset”,“ submit”等进行标记,以确保其正确地级联并选择正确的按钮。

也许也将所有这些都设置为具有相同的形式(即所有对我有用的形式)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.