ボタンをアクティブにする代わりに、HTMLフォームのEnterキーを送信する


81

単一のsubmit入力だけでなく、さまざまなbutton要素を持つHTMLフォームがあります。ユーザーが「Enter」キーを押すと、実際にフォームが送信されると思いますが、代わりに(少なくともChrome 15内では)最初のトリガーがトリガーされていることがわかりbuttonます(HTMLではsubmit入力よりも早く発生するため)、 私は推測する)。

一般に、ブラウザに特定のsubmit入力を優先させることはできないことは知っていますがsubmitbutton要素よりも入力を優先すると本当に思っていました。これを機能させるために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>

この質問を確認してください:stackoverflow.com/a/925387/1031900
Ofir Farchy 2011年

1
@OfirFarchyこの質問が違うと思ったのは、送信が1つだけで、他はすべてボタンであるということだったと思います。
andygeers 2011年

JSとjQueryの使用に反対しない場合は、my&davidの回答を確認してください
Ofir Farchy 2011年

回答:


143

デフォルトの送信ボタンまたは入力を選択するのに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"を設定することが違いを生みます。
アレックス

21
設定しないと機能しない理由type="button"は、デフォルトではボタン要素がtype="submit"。したがって、送信ボタンが1つしかないという質問の前提は、実際には正しくありませんでした。
エレザール2016年

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 2016年

2
HTMLソリューションが正解です。ブラウザはデフォルトで処理します
Edward Newsome 2018年

これは古い答えだと思いますが、この問題を解決するためにこの「重機」を使用する必要はありません。HTMLのみのソリューション(@JesúsCarreraの回答)を使用してください。ブラウザーがこれを処理するようになりました。
Martijn Luyckx 2018

1
このアプローチの良いところは、はい、jQuery / JavaScriptが必要ですが、フォームに複数の送信ボタンが必要な場合でも機能することです。button[type=submit]ただし、この例の特定のセレクターには、デフォルトの送信ボタンにdefaultcssクラスのタグを付けていると仮定して、後にスペースを入れないでください。
クリストファーキング

4

これを試してみてください。たとえば、Enterキーが押された場合は、このようにキャプチャできます。先日、HTMLボタンで選択を指定して回答を作成しました。これが役立つかどうかを確認してください。

たとえば、フォーム名を指定すると、フォームに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 2016年

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

3

私はこれで問題にぶつかった。私はをに変更するinputことからの脱落でした、buttonそして私はひどく書かれた/>タグターミネーターを持っていました:

だから私は持っていた:

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

そしてそれを次のように修正しました:

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

今では魅力のように機能し、常に迷惑な小さなもの... HTH


2

送信ボタンが1つしかない(またはこのソリューションでは1つでもない可能性がある)場合、同じページの複数のフォームで機能する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の両方でこれを回転させました。

上記のように、type = "button"、 "reset"、 "submit"などでマークアップして、正しくカスケードされ、正しいボタンが選択されるようにします。

おそらく、それらすべてを同じ形式に設定することもできます(つまり、私にとってはすべてがうまくいきました)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.