リターンキーが押されたときにフォームを送信するにはどうすればよいですか?


84

誰かがリターンキーが押されたとき、そしてフォームにボタンがない場合にHTMLフォームを送信する方法を教えてもらえますか? 送信ボタンはありません。その代わりにカスタムdivを使用しています。

回答:


61

IMO、これは最もクリーンな答えです:

<form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input type="submit" style="display:none"/>
</form>

さらに良いことに、JavaScriptを使用してカスタムdivを使用してフォームを送信する場合は、JavaScriptを使用してフォームを作成し、ボタンにdisplay:noneスタイルを設定する必要があります。このようにして、JavaScriptが無効になっているユーザーは、引き続き送信ボタンを表示してクリックできます。


display:noneを指定すると、IEは入力を無視することに注意してください。標準フォームとして開始し、プログレッシブエンハンスメントを使用して送信を非表示にし、新しいdivを作成する新しいJSFiddleの例を作成しました。StriplingWarriorのCSSスタイルを使用しました。


7
上記の方法はIEでは機能しません。IEは非表示の送信ボタンを無視します。
チャックフィリップス

@ChuckPhillips回答が更新され、IEでも正しく機能する新しい例が追加されました。
Chris Marasti-Georg 2011

1
Safari(5.1.2)で試しましたが、動作しません。私は同じページにとどまります。「display:none」スタイルを削除してみました。そしてそれはうまくいきました!Safariでは送信ボタンを表示する必要があるようです。

3
Chromeバージョン19.0.1084.56でも機能しません-機能するには送信ボタンが表示されている必要があります。Chrome、Safari、IEで機能する信頼性の高い修正については、以下のStriplingWarriorの回答を参照してください。
user2398029 2012年

86

エンターキーが押されたときにフォームを送信するには、これらの行に沿ってjavascript関数を作成します。

function checkSubmit(e) {
   if(e && e.keyCode == 13) {
      document.forms[0].submit();
   }
}

次に、必要なスコープにイベントを追加します(例:divタグ)。

<div onKeyPress="return checkSubmit(event)"/>

これは、とにかくInternet Explorer 7のデフォルトの動作でもあります(おそらく以前のバージョンも同様です)。


1
firefoxesポップアップブロッカーがこれをキャッチしているようです= |。
ジョン

4
エンターキーを押したままにする行為がマルチトリガーにならないように、私は「キーアップ」を好みます。
Justin Skiles 2015

54

さまざまなjavascript / jQueryベースの戦略を試しましたが、問題が発生し続けました。発生した最新の問題は、ユーザーがEnterキーを使用して、ブラウザーの組み込みのオートコンプリートリストから選択したときに誤って送信されたことです。私はついにこの戦略に切り替えました。これは、私の会社がサポートしているすべてのブラウザーで機能するようです。

<div class="hidden-submit"><input type="submit" tabindex="-1"/></div>
.hidden-submit {
    border: 0 none;
    height: 0;
    width: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
}

これは、Chris Marasti-Georgによって現在受け入れられている回答に似ていますが、回避display: noneすることにより、すべてのブラウザーで正しく機能するように見えます。

更新

上記のコードを編集してネガを含めtabindex、タブキーをキャプチャしないようにしました。これは技術的にはHTML4で検証されませんが、HTML5仕様には、ほとんどのブラウザーが既に実装している方法で機能させるための言語が含まれています。


14

<button>タグを使用します。W3C標準から:

BUTTON要素で作成されたボタンは、INPUT要素で作成されたボタンと同じように機能しますが、より豊富なレンダリングの可能性を提供します。BUTTON要素にはコンテンツが含まれる場合があります。たとえば、画像を含むBUTTON要素は、タイプが「image」に設定されているINPUT要素のように機能し、類似している可能性がありますが、BUTTON要素タイプはコンテンツを許可します。

基本的に、JavaScript<button>必要としない別のタグがあり、フォームを送信することもできます。<div>タグのように(<img />ボタンタグの内側を含めて)多くのスタイルを設定できます。<input />タグのボタンはそれほど柔軟ではありません。

<button type="submit">
    <img src="my-icon.png" />
    Clicking will submit the form
</button>

に設定する3つのタイプがあり<button>ます; それらは<input>ボタンタイプにマップされます。

<button type="submit">Will submit the form</button>
<button type="reset">Will reset the form</button>
<button type="button">Will do nothing; add javascript onclick hooks</button>

規格

私は<button>タグを使用します と少し カラフルで機能的なフォームボタンを取得するためのスタイリング。たとえば、要素<a class="button">を使用したスタイル設定へのリンク共有のcssを記述できることに注意してください<button>


9

私はこれがあなたが望むものだと信じています。

//<![CDATA[

//Send form if they hit enter.
document.onkeypress = enter;
function enter(e) {
  if (e.which == 13) { sendform(); }
}

//Form to send
function sendform() {
  document.forms[0].submit();
}
//]]>

キーが押されるたびに、関数enter()が呼び出されます。押されたキーがEnterキー(13)と一致する場合、sendform()が呼び出され、最初に検出されたフォームが送信されます。これは、Firefoxおよびその他の標準に準拠したブラウザ専用です。

このコードが役に立ったら、ぜひ私に投票してください!


1
ユーザーがシフトしたい場合はどうなりますか?フォームを送信する前に新しい行を入力してください。
Gaʀʀʏ

7

これがjQueryでそれを行う方法です

j(".textBoxClass").keypress(function(e)
{
    // if the key pressed is the enter key
    if (e.which == 13)
    {
        // do work
    }
});

他のJavaScriptはそれほど違いはありません。キャッチは、エンターキーである「13」のキー押下引数をチェックしています。


私はコードで@ [Sean](#29951)の回答を使用していますが、私もキャッチする必要があることがわかりましたe.which == 10
travis

6

次のスクリプトを使用します。

<SCRIPT TYPE="text/javascript">
<!--
    function submitenter(myfield,e)
    {
        var keycode;
        if (window.event) keycode = window.event.keyCode;
        else if (e) keycode = e.which;
        else return true;

        if (keycode == 13)
        {
            myfield.form.submit();
            return false;
        }
        else
            return true;
    }
//-->
</SCRIPT>

ユーザーがEnterキーを押したときにフォームを送信する必要がある各フィールドについて、次のようにsubmitenter関数を呼び出します。

<FORM ACTION="../cgi-bin/formaction.pl">
    name:     <INPUT NAME=realname SIZE=15><BR>
    password: <INPUT NAME=password TYPE=PASSWORD SIZE=10
       onKeyPress="return submitenter(this,event)"><BR>
<INPUT TYPE=SUBMIT VALUE="Submit">
</FORM>

2

私はこの方法を使用します:

<form name='test' method=post action='sendme.php'>
    <input type=text name='test1'>
    <input type=button value='send' onClick='document.test.submit()'>
    <input type=image src='spacer.gif'>  <!-- <<<< this is the secret! -->
</form>

基本的に、タイプimageの非表示の入力を追加するだけです(「spacer.gif」は1x1の透明なgifです)。

このようにして、「送信」ボタンを使用するか、キーボードのEnterキーを押すだけで、このフォームを送信できます。

これがトリックです!


1
問題は、送信ボタンを表示せずにフォームを送信する方法を尋ねることです。
マルコデマイオ2014年

0

div送信スタイルを送信ボタンに適用してみませんか?このためのJavaScriptがあると確信していますが、それはもっと簡単でしょう。


jQUery UIボタンを使用しても、同じ問題が発生します。これらのウィジェットを使用すると、ボタンに素敵な小さなアイコン(または必要に応じて2つ)を追加するオプションがあります。ただし、送信ボタンとして入力タグを使用する場合、このオプションは機能しません。したがって、a、またはspanまたはdivを使用する必要があります。
ピエールアンリ



0

答えを拡張すると、これは私のために働いたものです、多分誰かがそれが役に立つと思うでしょう。

HTML

<form method="post" action="/url" id="editMeta">
   <textarea class="form-control" onkeypress="submitOnEnter(event)"></textarea>
</form>

Js

function submitOnEnter(e) {
  if (e.which == 13) {
    document.getElementById("editMeta").submit()
  }
}

-1

Chris Marasti-Georgの例に似ていますが、代わりにインラインjavascriptを使用しています。基本的に、Enterキーを使用するフィールドにonkeypressを追加します。この例は、パスワードフィールドに作用します。

<html>
<head><title>title</title></head>
<body>
  <form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password" onkeypress="if(event.keyCode==13) {javascript:form.submit();}" /><br/>
  <input type="submit" onClick="javascript:form.submit();"/>
</form>
</body>
</html>

これは質問が求めたものではありません。目標は、送信ボタンなしで送信することでした...
jason

-1

以来display: noneボタンや入力はSafariとIEで動作しません、私は最も簡単な方法は、必要としないことがわかった余分なJavaScriptのハックを、単に絶対位置を追加することで<button />、フォームにし、はるかに画面をオフに置きます。

<form action="" method="get">
  <input type="text" name="name" />
  <input type="password" name="password" />
  <div class="yourCustomDiv"/>
  <button style="position:absolute;left:-10000px;right:9990px"/>
</form>

これは、2016年9月現在のすべての主要なブラウザーの現在のバージョンで機能します。

明らかに、<button/>必要に応じてスタイルを設定することをお勧めします(そしてより意味的に正しい)。


JavaScriptハックを強調せずに、CSSハックを提示します。
改革

-2

「autofocus」属性を使用すると、デフォルトでボタンに入力フォーカスを与えることができます。実際、フォーム内の任意のコントロールをクリックすると、フォームにフォーカスが移ります。これは、フォームがRETURNに反応するための要件です。したがって、ユーザーがフォーム内の他のコントロールをクリックしたことがない場合に備えて、「オートフォーカス」がそれを行います。

したがって、ユーザーがRETURNを押す前にフォームコントロールのいずれもクリックしなかった場合、「オートフォーカス」は決定的な違いをもたらします。

ただし、それでも、JSなしでこれを機能させるには2つの条件を満たす必要があります。

a)移動するページを指定する必要があります(空のままにすると機能しません)。私の例では、hello.phpです。

b)コントロールが表示されている必要があります。ページから移動して非表示にすることもできますが、display:noneまたはvisibility:hiddenを使用することはできません。私がやったことは、インラインスタイルを使用して、ページから200px左に移動することでした。スペースを取らないように高さを0pxにしました。そうしないと、上下の他のコントロールが中断される可能性があるためです。または、要素をフロートさせることもできます。

<form action="hello.php" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input autofocus type="submit" style="position:relative; left:-200px; height:0px;" />
</form>

反対票を投じた人は、私の解決策で何が好ましくなかったのか教えてくれませんか?
realtimeguy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.