送信ボタンなしでEnterキーを押してフォームを送信する


322

さて、Enterキーを押してフォームを送信しようとしていますが、送信ボタンを表示していません。すべてのブラウザーですべてが機能するようにしたいので、できればJavaScriptを使いたくありません(私が知る唯一のJSの方法は、イベントを使用することです)。

現在、フォームは次のようになっています。

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>

これはかなりうまくいきます。送信ボタンは、ユーザーがEnterキーを押すと機能し、Firefox、IE、Safari、Opera、Chromeでは表示されません。ただし、すべてのブラウザを備えたすべてのプラットフォームで機能するかどうかを判断するのが難しいため、私はまだソリューションが好きではありません。

誰もがより良い方法を提案できますか?それとも、これで十分ですか?


7
CSSからいくつかの文字を削る可能性のある小さな点で、通常は自動的に縮小版になります。長さゼロの測定に単位は必要ありません。0px = 0pt = 0em = 0emなど
pwdst

@pwdstこれを指摘してくれてありがとう-私はPythonの世界から来たので、「明示的は暗黙的よりも優れている」ので、CSSの場合は本当にそうなのか、それともCSS作成者は別のイディオムを持っていますか?
ericmjl 2017

2
ゼロはここでのルールの例外です@ericmjl-0px == 0em == 0%== 0vh == 0vhなど。他の(ゼロ以外の)長さ測定では、単位を指定しないことは悪い習慣であるだけでなく、規格に反しています。ユーザーエージェント(ブラウザ)でさまざまな動作が見られます。developer.mozilla.org/en-US/docs/Web/CSS/lengthおよびdrafts.c​​sswg.org/css-values-3/#lengths
pwdstを

2
疑わしい場合は、明確な長さの単位を言い換えます。
pwdst 2017

3
ユニットに0を追加しても問題はありませんが、言語に関係なく100%有効であるべきではなく、実際には数学的な抽象化にまで遡ります。OTOH、それらを持っているか、持っていないかの便利な使い方は、与えられたプロパティが「本当に0であることを意味し、そのままである」(ユニットなし)か、「今はたまたまゼロになるか」というメッセージを伝えることです。しかし、好みに合わせて調整されるかもしれません;または何でも...」(ユニット付き)。
Sz。

回答:


237

試してください:

<input type="submit" style="position: absolute; left: -9999px"/>

画面の外にあるボタンを左に押します。これの良い点は、CSSが無効になっていると、適切に機能が低下することです。

アップデート-IE7の回避策

ブライアン・ダウニング+が示唆しtabindexているように、タブがこのボタンに到達するのを防ぐため(アテス・ゴラルによる):

<input type="submit" 
       style="position: absolute; left: -9999px; width: 1px; height: 1px;"
       tabindex="-1" />

9
Erebusと同じ結果でIE7でこのソリューションを試してみました。以下のコード修正それ:position: absolute; width: 1px; height: 1px; left: -9999px;
ブライアンダウニング

84
なんて恐ろしいハック:(そもそもなぜHTMLはこのようなものなのでしょうか?この場合、enterが機能しないのに十分な理由はありますか?
nornagon

28
@nornagon:このハックが恐ろしいと感じた場合は、恐ろしくないハックを提案してください。HTMLとは...
Ates Goral、2011

13
@MooseFactorytabindex="-1"
ATES Goral

14
「CSSが無効になっているときの優雅な低下は、すばらしいことです」?!確かに、これはうまく機能しますが、「優雅な低下」の部分は単にマーケティング戦略です。2002年からこのページを見つけるまで、そのことを聞いたこともありませんでした。そうです、「ブラウザでcssが無効になっています」の最初のページにある唯一の Googleの結果は10年前(または2009年にこの回答が出されたことを考慮して7)からのものです。
Vicky Chijwani 2013年

97

私はあなた Javascriptのルートに行くべきだと思います、または少なくとも私はそうします:

<script type="text/javascript">
// Using jQuery.

$(function() {
    $('form').each(function() {
        $(this).find('input').keypress(function(e) {
            // Enter pressed?
            if(e.which == 10 || e.which == 13) {
                this.form.submit();
            }
        });

        $(this).find('input[type=submit]').hide();
    });
});
</script>


<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" />
</form>

6
テスト済みで問題なく動作します。ただし、このようなことを試す前に、JavaScriptを介してフォームを送信しても、一部のブラウザではパスワードの保存機能が提供されないことに注意してください。
アンディク2009年

3
これにより、送信ボタンが一瞬表示されます(ページが読み込まれてJSが実行されるまで)。
ノルナゴン2011

15
キープレスは、オートコンプリートからの選択に対してもトリガーされます。つまり、ユーザーがメールアドレスを入力していて、ユーザーがEnterキーを押して、ブラウザーのオートコンプリートから以前に指定したものを選択した場合、フォームが送信されます。ユーザーが期待するものではありません。
cburgmer 2012年

2
幅広いサポートのためにkeydownから切り替えましたがkeypress、Chromeをサポートe.preventDefault();するif場合は、前に追加する必要があります。
Campbeln 2015

1
@Campbelnを.on('keypress'...)代わりに使用できる場合があります。のドキュメント.on()は、.preventDefault()あなたを探しているように見えます。
jinglesthula 2016年

79

これを試しましたか?

<input type="submit" style="visibility: hidden;" />

ほとんどのブラウザはを理解visibility:hiddenしていて、実際display:noneにはのように動作しないので、それでも問題ないはずです。自分で実際にテストしていないので、CMIIWです。


3
およそただ一つのことがありますvisibility: hidden:あなたが読むことができるようW3Schoolsのvisibity:どれもまだレイアウトに影響を与えません。この空白を避けたい場合は、絶対配置のソリューションの方が適しているようです。
loybert

8
あなたは、両方のソリューションを組み合わせることができます:<input type="submit" style="visibility: hidden; position: absolute;" />
VaclavSir

2
畜生、これはIE8での作業(それがフォームを送信していない)ので、上記の勝利から解決しません:position: absolute; left: -100px; width: 1px; height: 1px;
VaclavSir

31

送信ボタンのない別のソリューション:

HTML

<form>
  <input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>

jQuery

$(document).ready(function() {

  $('.submit_on_enter').keydown(function(event) {
    // enter has keyCode = 13, change it if you want to use another button
    if (event.keyCode == 13) {
      this.form.submit();
      return false;
    }
  });

});

1
奇妙なトリック。ボタンをテキストボックスにすることです。しかし、このトリックはすべてのブラウザーで機能するので、私はあなたを信用しています!
Jenna Leaf

@JennaLeafに感謝;-)とにかく私はそれはそれほど奇妙ではないと思います-多くのオンラインフォームはキーダウンの単に「トリガー」を送信するために使用します。例としては、google検索バーがあります(おそらく、このコードを正確に使用していませんが、おそらく同じようなものです)。
damoiser '17年

16

将来この答えを見ている人のために、HTML5はフォーム要素に新しい属性を実装しますhidden。これは自動的に適用されますdisplay:noneします。要素にれます。

例えば

<input type="submit" hidden />

デスクトップのChromeでは動作するように見えますが、iPhoneのChromeやSafariでは動作しないようです。
Ulf Adams

@UlfAdams iPhone 12.1.2のChromeとSafariで動作します。
マシューキャンベル、

13

次のコードを使用すると、3つのブラウザーすべて(FF、IE、Chrome)で私の問題が修正されました。

<input  type="submit" name="update" value=" Apply " 
    style="position: absolute; height: 0px; width: 0px; border: none; padding: 0px;"
    hidefocus="true" tabindex="-1"/>

上記の行を、名前と値の適切な値を使用して、コードの最初の行として追加します。


7

ボタンを非表示にするために現在使用しているハックの代わりvisibility: collapse;に、style属性を設定する方がはるかに簡単です。ただし、フォームの送信には、簡単なJavascriptを少し使用することをお勧めします。私が理解している限りでは、そのようなものへのサポートは今日では至る所にあります。


7

hidden属性をtrueに設定するだけです。

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" hidden="true" />
</form>

4
非表示の属性は、Enterキーを押すことで送信を無効にします。
66Ton99 2013

@ 66Ton99 FFでテストするだけです。提出を無効にするものではありません
Eugen Konkov

1
「私のマシンで動作します」;)Firefox以外にも多くのブラウザがあります。間違いなく、ブラウザ間で確実に機能するソリューションが必要になる場合があります。
フェリックス・ガニオン-グルニエ

Chrome 63で動作します
piotr_cz

現時点では、ChromeまたはiPhoneのSafariでは機能しません。
Ulf Adams

7

これを行う最もエレガントな方法は、送信ボタンを維持することですが、境界線、パディング、フォントサイズを0に設定します。

これにより、ボタンの寸法が0x0になります。

<input type="submit" style="border:0; padding:0; font-size:0">

これを自分で試すことができます。要素にアウトラインを設定すると、ドットが表示されます。これは、0x0 px要素を「囲む」外側の境界線です。

可視性は必要ありません。非表示ですが、夜に眠るようになっている場合は、ミックスに入れることもできます。

JSフィドル


5

IEでは、送信ボタンが表示されておらず、フォームに複数のフィールドがある場合、フォーム送信のためにEnterキーを押すことができません。1x1ピクセルの透明な画像を送信ボタンとして提供することで、必要なものを提供します。もちろん、それはレイアウトのピクセルを占めますが、それを隠すためにあなたがしなければならないことを見てください。

<input type="image" src="img/1x1trans.gif"/>

4

これは私の解決策であり、Chrome、Firefox 6、IE7 +でテストされています。

.hidden{
    height: 1px;
    width: 1px;
    position: absolute;
    z-index: -100;
}

IE8はposition:absoluteが好きではないようで、送信しません。
maxxyme 2014

4
<input type="submit" style="display:none;"/>

これは正常に機能し、達成しようとしていることの最も明示的なバージョンです。

差があることに注意してくださいdisplay:nonevisibility:hidden他のフォーム要素については。




2

IEに問題がある人や他の人にも。

{
    float: left;
    width: 1px;
    height: 1px;
    background-color: transparent;
    border: none;
}

私はまだposition:absoluteを使用しますが、floatはレイアウトに影響します。
SuperDuck 2014

IE8はposition:absoluteが好きではないようで、送信しません。私が使用するもの:
maxxyme 2014

float: left;同様で、削除すると送信されます。
maxxyme 2014

2

これも試すことができます

<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">

幅/高さ= 0ピクセルの画像を含めることができます


1
重要:有効な画像URLを使用する必要があります。そうしないと、Firefoxのページに「クエリの送信」というテキストが表示されます
PH。

2
存在する画像を追加して高さと幅をゼロに設定するか、存在しない画像を追加すると、ブラウザはリソースに対して無駄なGETリクエストを行う必要があります。
pwdst 2013年

2

一連のUIフレームワークを使用しています。それらの多くには、視覚的に物事を隠すために使用できる組み込みクラスがあります。

ブートストラップ

<input type="submit" class="sr-only" tabindex="-1">

角材

<input type="submit" class="cdk-visually-hidden" tabindex="-1">

これらのフレームワークを作成した素晴らしい心は、これらのスタイルを次のように定義しています。

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.cdk-visually-hidden {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
    outline: 0;
    -webkit-appearance: none;
    -moz-appearance: none;
}

1

ドキュメントの機能に追加しました。フォームに送信ボタンがない場合(私のすべてのJqueryダイアログフォームに送信ボタンがない場合)、それを追加します。

$(document).ready(function (){
    addHiddenSubmitButtonsSoICanHitEnter();
});
function addHiddenSubmitButtonsSoICanHitEnter(){
    var hiddenSubmit = "<input type='submit' style='position: absolute; left: -9999px; width: 1px; height: 1px;' tabindex='-1'/>";
    $("form").each(function(i,el){
        if($(this).find(":submit").length==0)
            $(this).append(hiddenSubmit);
    });
}

0
input.on('keypress', function(event) {
    if ( event.which === 13 ) {
        form.submit();
        return false;
    }
});

-2

私は使用しました:

<input class="hidden" type="submit" value="" 
onclick="document.getElementById('loginform').submit();"/>

そして:

 .hidden {
        border:0;
        padding:0;
        font-size:0;
        width: 0px;
        height: 0px;
    }

.cssファイル内。私にとっても魔法のように機能しました。:)

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