Enterキーを押して、ユーザーがフォームを送信できないようにする


773

Webサイトでアンケートを実施していますが、ユーザーがEnterキーを押した(理由がわからない)と、送信ボタンをクリックせずに誤ってアンケート(フォーム)を送信した場合に問題が発生するようです。これを防ぐ方法はありますか?

調査ではHTML、PHP 5.2.9、jQueryを使用しています。


2
...それは私がしたいものだ、あなたはキー・リスニングと予防的なアプローチを進めることができ、フォームタグを使用して、カスタムAJAX要求:)しかし、確かにしないでください
jancha

フォームタグを使用しないのは、従来とは異なる方法(つまり、フォーカスがドロップされたときにいくつかのフィールドを送信するなど)でajaxリクエストを介してフォームを処理することを好むからです。Enterキーをキャッチする特別なリスナーを作成して、必要な場合にのみ処理することもできます。
フアン

回答:


881

次のような方法を使用できます

$(document).ready(function() {
  $(window).keydown(function(event){
    if(event.keyCode == 13) {
      event.preventDefault();
      return false;
    }
  });
});

元の投稿のコメントを読んで、それをより使いやすくEnterし、すべてのフィールドに入力した場合に人々が押すことができるようにします。

function validationFunction() {
  $('input').each(function() {
    ...

  }
  if(good) {
    return true;
  }
  return false;
}

$(document).ready(function() {
  $(window).keydown(function(event){
    if( (event.keyCode == 13) && (validationFunction() == false) ) {
      event.preventDefault();
      return false;
    }
  });
});

7
私は現在、簡単な修正を探しているだけで、検証項目を実装する時間がありません。皆さんの答えに感謝しますが、これは私が一緒に行くつもりです。ありがとうございました。
DForck42 2009年

8
このメソッドは、ユーザーが送信ボタンにフォーカスしているときにEnterキーを押してフォームを送信できないようにするため、理想的ではありません。最良の解決策は、以下のBalusCの解決策です。この場合、フォームの入力に集中している間だけ入力が中断されます。
Anson Kao

3
これを機能させるためkeydownに、documentではなくにバインドする必要がある状況(Internet Explorerのみ)を見てきましたwindow
MartinHN、2012

8
&& !$(document.activeElement).is('textarea')条件に追加することをお勧めします。そうしないと、textarea内の改行がブロックされます(少なくともIEでは)。
フラッシュ

1
これでうまくいきます。ただし、これにより、textareaに改行が追加されなくなります。
セザールレオン

613

どこでもキーの入力を禁止する

<textarea>フォームにがない場合は、次のコードをに追加してください<form>

<form ... onkeydown="return event.key != 'Enter';">

またはjQueryで:

$(document).on("keydown", "form", function(event) { 
    return event.key != "Enter";
});

これにより、フォーム内のすべてのキー押下がでチェックされますkey。そうでない場合はEnter、戻りtrue、通常どおりに続行します。もしそうならEnter、それは戻っfalseて何もすぐに停止するので、フォームは送信されません。

keydownイベントが好まれるkeyupようkeyup手遅れブロック形態に提出しています。歴史的にはもありましたkeypressが、これはと同様に非推奨ですKeyboardEvent.keyCodeKeyboardEvent.key代わりに、押されているキーの名前を返すを使用する必要があります。ときにEnterチェックされ、これは13(通常は入力)チェックも108として(テンキー入力)であろう。

$(window)他のいくつかの回答で示唆されているように、IE <= 8では/ $(document)では機能しないので、これらの貧しいユーザーもカバーしたい場合は、これは良い選択ではありません。keydownkeyup

テキストエリアでのみキーの入力を許可する

あなたが持っている場合は<textarea>、あなたの形で(これはもちろん必要があり、その後ではありませんすべての個々の入力要素にkeydownイベントハンドラを追加し、Enterキーを受け入れます)<textarea>

<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...

ボイラープレートを減らすために、これはjQueryで実行することをお勧めします。

$(document).on("keydown", ":input:not(textarea)", function(event) {
    return event.key != "Enter";
});

これらの入力要素に他のイベントハンドラー関数がアタッチされており、何らかの理由でEnterキーで呼び出したい場合は、falseを返すのではなく、イベントのデフォルトの動作のみを防止して、他のハンドラーに適切に伝播できるようにします。

$(document).on("keydown", ":input:not(textarea)", function(event) {
    if (event.key == "Enter") {
        event.preventDefault();
    }
});

テキストエリアと送信ボタンのみにキーの入力を許可します

送信ボタンでEnterキーも許可する<input|button type="submit">場合は、以下のようにセレクターをいつでも調整できます。

$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
    // ...
});

input[type=text]他のいくつかの回答で提案されているように、HTML5の非テキスト入力はカバーされていないため、これは適切なセレクタではありません。


11
それはまた、テキストエリア、より良いイベントの伝播を説明するなど、フォームを扱うため、この1は良い答えでなければなりません
foob​​arに

6
":input:not(textarea):not([type=submit]):not(button)"<button>代わりに使用している場合<input type=submit>
Simon_Weaver

これにより、Enterキーがtextarea以外の入力で機能するのを防ぎます。それは良い解決策ではありません
mate.gwozdz 2017

以前にコロンがあるはずinputですか?
xfactorial 2018

1
@YodaDaCoda:同意して調整。
BalusC

110

セクション4.10.22.2 W3C HTML5仕様の暗黙的な提出は、次のように述べています。

form要素のデフォルトボタンは、最初にボタンを提出して、ツリーの順序を持つフォーム所有者のものであるform要素。

ユーザーエージェントがユーザーによるフォームの暗黙的な送信をサポートしている場合(たとえば、一部のプラットフォームでは、テキストフィールドがフォーカスされているときに「Enter」キーを押すと、暗黙的にフォームが送信される)、デフォルトのボタンアクティブ化が定義されているフォームに対してこれを行うこの動作により、ユーザーエージェントは、デフォルトのボタンで合成クリックのアクティブ化手順実行する必要があります

注:したがって、デフォルトのボタンが無効になっている場合、そのような暗黙的な送信メカニズムが使用されていると、フォームは送信されません。(ボタンが無効になっている場合、アクティブ化動作はありません。)

したがって、フォームの暗黙的な送信を無効にする標準準拠の方法は、無効化された送信ボタンをフォームの最初の送信ボタンとして配置することです。

<form action="...">
  <!-- Prevent implicit submission of the form -->
  <button type="submit" disabled style="display: none" aria-hidden="true"></button>

  <!-- ... -->

  <button type="submit">Submit</button>
</form>

このアプローチの優れた機能の1つは、JavaScriptがなくても機能することです。JavaScriptが有効かどうかに関係なく、暗黙的なフォーム送信を防ぐために、標準に準拠したWebブラウザーが必要です。


6
えっと…これは純金です。これが実際にクロスブラウザーで機能する場合、トップに移動するに値します!キープレス、キーダウンなどのバリエーションで多くの人が答えたが、この標準ベースの答えを見逃したのはなぜですか。
ジョンリース2018

4
一方で、それは単純であり、受け入れられた回答によって示唆されるすべての落とし穴を防ぎます。一方、標準のわずかな悪用のように感じます。aria- *属性を含めることに対する称賛。これについてもっとフィードバックをもらいたいです。
Solvitieg 2018年

2
同様に機能し<input type="submit" disabled style="display: none" aria-hidden="true" />、ページのサイズを数文字減らすことができます。:-P
ゲファン

7
IE 11はとにかく提出します。
CamaroSS

2
Safariは新しいIEです。
ツイストピクセル

68

フォームが送信されないようにするために、キーを押すことに関連する3つのイベントすべてをキャッチする必要がありました。

    var preventSubmit = function(event) {
        if(event.keyCode == 13) {
            console.log("caught ya!");
            event.preventDefault();
            //event.stopPropagation();
            return false;
        }
    }
    $("#search").keypress(preventSubmit);
    $("#search").keydown(preventSubmit);
    $("#search").keyup(preventSubmit);

上記すべてを組み合わせて素敵なコンパクトバージョンにすることができます。

    $('#search').bind('keypress keydown keyup', function(e){
       if(e.keyCode == 13) { e.preventDefault(); }
    });

7
最後の3つのセレクターをチェーンするか、1つのメソッドで複数のイベントをバインドすることができます$("#search").bind('keypress keyup keydown',preventSubmit)
Moak

ASP.NET Webフォームではすべてを<form>タグにネストする必要があるため、Enterキーでフォーム送信されます...このソリューションではEnterキーが無効になり、問題が修正されました。@ Daveに感謝します。次に、によって特定のフィールドのEnterキーを有効にしましたid
Ian Campbell

@Upgradingdave「console.log()」の代わりに「log()」をどのように書くことができますか?
radbyx 2018

1
@radbyx ...良いキャッチ、それはであるはずですconsole.log、私は私の答えを更新しました。
アップグレード

keypress keyup keydownif条件のコードを2回トリガーすることに注意してください。
カイノアック

56

スクリプトを使用して実際の送信を行う場合は、次のように「return false」行をonsubmitハンドラーに追加できます。

<form onsubmit="return false;">

JavaScriptからフォームでsubmit()を呼び出しても、イベントはトリガーされません。


Chromeで動作します。これにより送信ボタンも無効になります。送信ボタン自体でonlick-eventをトリガーする場合は問題ありません。Ajaxヒント:戻る前に関数呼び出しを追加すると、ユーザーはフォームをページに送信せずにEnterキーを押すことができます。
Dennis Heiden

Chrome、IE-11、Firefoxで私のために働き、実装する最も簡単なソリューションでした。一部の回答のように、ページのセクション全体でEnterキーを無効にすると、極端になりすぎてバグが発生しやすくなります。
ロベルト

ありがとうございました。それは私のために働いた。
LU

23

使用する:

$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
  if(e.keyCode == 13) {
    e.preventDefault();
    return false;
  }
});

このソリューションは、Webサイト上のすべてのフォーム(Ajaxで挿入されたフォームでも)Enterで機能し、入力テキストのs のみを防ぎます。それをドキュメント対応関数に配置して、この問題を一生忘れてください。


元の答えe.whichは大丈夫だったと思います。に変更する必要はありませんe.keyCode。どちらもEnterキーに対して値13を返します。参照stackoverflow.com/a/4471635/292060stackoverflow.com/a/18184976/292060
goodeye

2
このソリューションは2つのソリューションを処理します。1。)入力時にフォームを送信しないでください。2。)テキストエリアに入力できます
PlanetUnknown

21

ユーザーが押すのを防ぐ代わりに Enter不自然に思えるかもしれませんが、フォームをそのままにして、クライアント側の検証を追加することができます。フォームを完成させるために何を完了する必要があるか。jQueryを使用している場合は、検証プラグインを試してください。

http://docs.jquery.com/Plugins/Validation

これはEnterボタンをキャッチするよりも多くの作業を必要としますが、確かにより豊かなユーザーエクスペリエンスを提供します。


13
これは良さそうに聞こえますが、オプションのフィールドには問題があり、ユーザーが誤ってEnterキーを押すとフォームが送信されます。必要に応じてすべてのフィールドを入力しない限り、調査が終了していないことをどのように知るかわかりません(デフォルトの選択なし、空白のフィールドは許可されていません...)
Christophe Roussy 2013年

19

素敵でシンプルな小さなjQueryソリューション:

$("form").bind("keypress", function (e) {
    if (e.keyCode == 13) {
        return false;
    }
});

1
+1通常のJSを使用する代わりに、jQueryの代替案を探していましたvar key = event.keyCode || event.which; if (key == 13) return false;
RaphaelDDL 2011

1
技術的には、これはまだ単純なjqueryラッパーを使用したPOJです。あなたが与えたコードはほとんど同じものです。
Eonasdan 2011

19

まだコメントできないので、新しい回答を投稿します

受け入れられた答えは大丈夫ですが、テンキーのエンターで送信を停止していませんでした。少なくとも現在のバージョンのChromeでは。キーコードの条件をこれに変更する必要があり、それが機能しました。

if(event.keyCode == 13 || event.keyCode == 169) {...}

5
EnterとReturnの違い-多くのPOSオペレーターはテンキーを排他的に使用します。+1
helloserve '25

8
現在(2015年
Cliff Burton

15

目標を達成することが私の解決策であり、クリーンで効果的です。

$('form').submit(function () {
  if ($(document.activeElement).attr('type') == 'submit')
     return true;
  else return false;
});

13

完全に異なるアプローチ:

  1. <button type="submit">フォームの最初のボタンは、を押すとアクティブになりますEnter
  2. これはボタンが非表示になっている場合でも同様です style="display:none;
  3. そのボタンのスクリプトは戻ることができます false、送信プロセスを中止します。
  4. <button type=submit>のフォームを送信することもできます。true提出をカスケードするために戻るだけです。
  5. Enter実際の送信ボタンにフォーカスがあるときに押すと、実際の送信ボタンがアクティブになります。
  6. Enter内部<textarea>または他のフォームコントロールを押すと、通常どおり動作します。
  7. フォームコントロールEnter内を押すと<input>、最初のトリガーがトリガーされます<button type=submit>、が返されるfalseため、何も起こりません。

したがって:

<form action="...">
  <!-- insert this next line immediately after the <form> opening tag -->
  <button type=submit onclick="return false;" style="display:none;"></button>

  <!-- everything else follows as normal -->
  <!-- ... -->
  <button type=submit>Submit</button>
</form>

1
ええと、ChromeとFirefoxでは、さらに短いバージョンは<button disabled style = "display:none;"> <button>になります。これには、JSが機能する必要がないという利点もあります。Safariは単にボタンを無視するので、他のことが通常どおり行われます。
Erics

1
私は「13キーコードを無視する」方法が本当に好きではないので、簡単でトリッキーな方法を考え始めました。このアイデアが頭に浮かび、このページを下にスクロールしているときに、このスレッドを見ました:) プラス1つの相互のアイデアと当然の最善の解決策。
Jalali Shakib、2018年

私にとっては完璧な答えです。ユーザーが次の各フィールドでEnterキーを押し、最後に送信するように、CLIをエミュレートするフォームが必要でした。
nathan

ああ素晴らしい、最後のボタンは、高速クリックでの重複送信を防ぐために次のようにすることができます:<button onclick="this.disabled=true;this.form.submit();" type="submit"">submit</button>
Arash Moosapour

@ArashMoosapourにフォーカスがある場合は送信ボタンを無効にしないでください。これを行うと、フォーカスが失われ、アクセシビリティが混乱します。
エリック

9

フォームに「javascript:void(0);」のアクションを与える トリックをするようです

<form action="javascript:void(0);">
<input type="text" />
</form>
<script>
$(document).ready(function() {
    $(window).keydown(function(event){
        if(event.keyCode == 13) {
    alert('Hello');
        }
    });
});
</script>

8

送信ボタンを配置しないことで実現できます。スクリプトを入力(type = button)に追加するか、フォームでデータを送信する場合はeventListenerを追加します。

むしろこれを使う

<input type="button">

これを使うより

<input type="submit">

8
  1. 入力またはボタンにtype = "submit"を使用しないでください。
  2. 使用タイプ=「ボタン」と使用jsが[jqueryの/角度の/ etc]サーバーにフォームを提出します。

7

特定の入力のみが送信されないようにする必要があったので、クラスセレクターを使用して、必要なときにいつでもこれを「グローバル」機能にすることができました。

<input id="txtEmail" name="txtEmail" class="idNoEnter" .... />

そして、このjQueryコード:

$('.idNoEnter').keydown(function (e) {
  if (e.keyCode == 13) {
    e.preventDefault();
  }
});

または、キーダウンが不十分な場合:

$('.idNoEnter').on('keypress keydown keyup', function (e) {
   if (e.keyCode == 13) {
     e.preventDefault();
   }
});

いくつかのメモ:

ここでさまざまな良い答えを変更すると、Enterキーはkeydownすべてのブラウザで機能するようです。別bind()on()方法として、メソッドを更新しました。

私はクラスセレクターの大ファンであり、すべての長所と短所とパフォーマンスの議論を比較検討しています。私の命名規則は、CSSスタイル設定と区別するために、jQueryがIDとして使用していることを示す「idSomething」です。


これは、フォームのテキストボックス要素で機能します。入力してテキストボックスでEnterキーを押すと、デフォルトの動作でフォームが送信されます。これにより、Enterキーが傍受され、送信されなくなります。
goodeye 2014年

5

JavaScriptメソッドを作成して、Enterキーがヒットしたかどうかを確認し、ヒットした場合は送信を停止することができます。

<script type="text/javascript">
  function noenter() {
  return !(window.event && window.event.keyCode == 13); }
</script>

submitメソッドで呼び出すだけです。


4

BLOCK SUBMITのみですが、Enterキーのその他の重要な機能ではありません<textarea>

window.addEventListener('keydown', function(event) {
  //set default value for variable that will hold the status of keypress
  pressedEnter = false;

  //if user pressed enter, set the variable to true
  if (event.keyCode == 13)
    pressedEnter = true;

  //we want forms to disable submit for a tenth of a second only
  setTimeout(function() {
    pressedEnter = false;
  }, 100)

})

//find all forms
var forms = document.getElementsByTagName('form')

//loop through forms
for (i = 0; i < forms.length; i++) {
  //listen to submit event
  forms[i].addEventListener('submit', function(e) {
    //if user just pressed enter, stop the submit event
    if (pressedEnter == true) {
      updateLog('Form prevented from submit.')
      e.preventDefault();
      return false;
    }

    updateLog('Form submitted.')
  })
}

var log = document.getElementById('log')
updateLog = function(msg) {
  log.innerText = msg
}
input,
textarea {
  display: inline-block;
  margin-bottom: 1em;
  border: 1px solid #6f6f6f;
  padding: 5px;
  border-radius: 2px;
  width: 90%;
  font-size: 14px;
}

input[type=submit] {
  background: lightblue;
  color: #fff;
}
<form>
  <p>Sample textarea (try enter key):</p>
  <textarea rows="4">Hit enter, a new line will be added. But the form won't submit</textarea><br/>
  <p>Sample textfield (try enter key):</p>
  <input type="text" placeholder="" />
  <br/>
  <input type="submit" value="Save" />
  <h3 id="log"></h3>
</form>


誰が、なぜこれに反対票を投じるのだろう:| 私のソリューションの問題は何ですか?
mate.gwozdz 2018

貢献に賛成。受け入れられた回答は、ほとんどのフォームUIを壊し、「enter」がアプリケーション全体に登録されないようにします。良くない。Enterをフォーム要素、特にボタンで処理できるようにすることは良い考えだと思うので、下に行くパスが好きです。これはタイムアウトなしで達成できると思います。たとえば、イベントハンドラーのelement属性を見てください。「ボタン」と「送信」を許可
Solvitieg

@NathanCH-このコードは、あなたが言っていることとは正反対です。それは唯一の防止にはフォームを送信から入ると、他の機能を妨げない-たとえば、テキストフィールドを持って、新しい段落を作成するために、入力に使用する場合があります。
mate.gwozdz 2018年

1
最初の行にタイプミスがあります。代わりにfunction(e)それがありますfunction(event)。そうでなければ、それは私のために働きます。ありがとうございました。
ギジェルモプランディ

1
これは絶対的な命の恩人です。他のすべてのものは、グリッドのインライン編集のようなもののためにsaveイベントを適切に処理することを妨げます。唯一の提案は、「setTimeout」をまったく使用しないことです。それが人々がこの答えで抱えている問題だと思います。それはあまりにも気難しいです。代わりに、イベントを実行 on("keydown", function(event) { enterPressed = true; }してから送信イベントで、on("submit", function(e) { if (pressedEnter == true) { pressedEnter = false; e.preventDefault(); return false;}これを実行します。 これにより、遅延に関係なく確実に機能します。
Curtis Snowden

3

これは完璧な方法です、あなたのページからリダイレクトされません

$('form input').keydown(function (e) {
if (e.keyCode == 13) {
    e.preventDefault();
    return false;
}
});

2

「ajax textfields」(Yii CGridView)を含むグリッドと1つの送信ボタンしかないという同様の問題がありました。テキストフィールドで検索を行って、送信されたフォームにEnterキーを押すたびに。ボタン(MVCパターン)間の唯一の一般的なボタンだったので、ボタンを使って何かをしなければなりませんでした。私がしなければならなかったすべては取り外しtype="submit"て置くことでしたonclick="document.forms[0].submit()


2

私はそれがすべての答えで十分にカバーされていると思いますが、JavaScript検証コードを含むボタンを使用している場合は、フォームのonkeypressをEnterに設定して、送信を期待どおりに呼び出すことができます。

<form method="POST" action="..." onkeypress="if(event.keyCode == 13) mySubmitFunction(this); return false;">

onkeypress JSは、何をする必要があるかもしれません。大規模な地球規模の変化は必要ありません。これは、自分でアプリを最初からコーディングするのではなく、他の誰かのWebサイトを分解して再テストすることなく修正する場合に特に当てはまります。


トムハバードの回答のバリエーションに気づきました。+ 1を付けたのは、他のアイデアを探すためにSOを検索する前に、今日自分が実際に行ったことだからです。
ニンニク

2

ここには良い答えがたくさんありますが、UXの観点から何かを貢献したいだけです。フォームのキーボードコントロールは非常に重要です。

問題は、キープレスでの送信を無効にする方法Enterです。Enterアプリケーション全体で無視する方法ではありません。したがって、ウィンドウではなくフォーム要素にハンドラーをアタッチすることを検討してください。

Enterフォーム送信を無効にしても、次のことが可能になります。

  1. Enter送信ボタンがフォーカスされている場合のフォーム送信。
  2. すべてのフィールドが入力されたときのフォーム送信。
  3. を介した非送信ボタンとの相互作用Enter

これは単なるボイラープレートですが、3つすべての条件に従います。

$('form').on('keypress', function(e) {
  // Register keypress on buttons.
  $attr = $(e.target).attr('type);
  if ($attr === 'button' || $attr === 'submit') {
    return true;
  }

  // Ignore keypress if all fields are not populated.
  if (e.which === 13 && !fieldsArePopulated(this)) {
    return false;
  }
});


1

私がここで答えを見ていないもの:ページ上の要素をタブで移動するEnterときに送信ボタンに到達したときに押すと、フォームのonsubmitハンドラーがトリガーされますが、イベントはMouseEventとして記録されます。これがほとんどのベースをカバーするための私の短い解決策です:

これはjQuery関連の答えではありません

HTML

<form onsubmit="return false;" method=post>
  <input type="text" /><br />
  <input type="button" onclick="this.form.submit()" value="submit via mouse or keyboard" />
  <input type="button" onclick="submitMouseOnly(event)" value="submit via mouse only" />
</form>

JavaScript

window.submitMouseOnly=function(evt){
    let allow=(evt instanceof MouseEvent) && evt.x>0 && evt.y>0 && evt.screenX > 0 && evt.screenY > 0;
    if(allow)(evt.tagName=='FORM'?evt.target:evt.target.form).submit();
}

動作する例を見つけるには:https : //jsfiddle.net/nemesarial/6rhogva2/


0

私の特定のケースでは、ENTERによるフォームの送信を停止し、送信ボタンのクリックをシミュレートする必要がありました。これは、モーダルウィンドウ(古いコードを継承)内にいるため、送信ボタンにクリックハンドラーがあったためです。いずれにせよ、この場合の私のコンボソリューションは次のとおりです。

    $('input,select').keypress(function(event) {
        // detect ENTER key
        if (event.keyCode == 13) {
            // simulate submit button click
            $("#btn-submit").click();
            // stop form from submitting via ENTER key press
            event.preventDefault ? event.preventDefault() : event.returnValue = false;
        }
    });

この使用例は、IE8を使用しているユーザーに特に役立ちます。


0

これは私のために働く

jQuery.each($("#your_form_id").find('input'), function(){
    $(this).bind('keypress keydown keyup', function(e){
       if(e.keyCode == 13) { e.preventDefault(); }
    });
});

0

私は小さなCoffeeScriptコードを追加したいと思います(フィールドテストされていません):

$ ->
    $(window).bind 'keypress', (event) ->
        if event.keyCode == 13
            unless {'TEXTAREA', 'SELECT'}[event.originalEvent.srcElement.tagName]
                event.preventDefault()

(unless句の素敵なトリックを気に入っていただければ幸いです。)


0

JavaScriptの使用(入力フィールドをチェックしない):

<script>
window.addEventListener('keydown', function(e) {
    if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
        e.preventDefault();
        return false;
    }
}, true);
</script>

これを特定のフィールド、たとえば入力タイプのテキストに適用したい場合:

<script>
window.addEventListener('keydown', function(e) {
    if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
        if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {
            e.preventDefault();
            return false;
        }
    }
}, true);
</script>

これは私の場合うまくいきます。


0

あなたのCSSに移動してそれを追加すると、入力が送信されている限り、それが不要になったときに削除または入力activateしてdeactivate代わりに、式の送信が自動的にブロックされます

 input:disabled {
        background: gainsboro;
      }
      input[value]:disabled {
        color: whitesmoke;
      }

0

を使用javascript:void(0)してフォームの送信を防止することもできます。

<form action="javascript:void(0)" method="post">
    <label for="">Search</label>
    <input type="text">
    <button type="sybmit">Submit</button>
</form>

<form action="javascript:void(0)" method="post">
    <label for="">Search</label>
    <input type="text">
    <button type="sybmit">Submit</button>
</form>


特にmethod="post"フォーム上にある場合は機能しません。たとえば、フォームをボタンで送信したいのですが、入力に焦点を当てた状態でEnterキーを押したときはそうしません。
Souleste

この条件では、上記の回答を使用できます。この回答は、Enterキーと両方のフォームの送信によるフォーム送信の防止に基づいているためです。上記の例はmethod="post"フォームとその動作にありますので、もう一度確認してください。
Nisharg Shah

-2

これは、他のソリューションに非常に不満を感じた後、すべてのブラウザで私にとってうまくいきました。name_space外部関数は、グローバルを宣言しないようにするためのものです。これもお勧めします。

$(function() {window.name_space = new name_space();}); //jquery doc ready
function name_space() {
    this.is_ie = (navigator.userAgent.indexOf("MSIE") !== -1);

    this.stifle = function(event) {
        event.cancelBubble;
        event.returnValue = false;
        if(this.is_ie === false) {
            event.preventDefault();
        }
        return false;
    }

    this.on_enter = function(func) {
        function catch_key(e) {
            var enter = 13;
            if(!e) {
                var e = event;
            }
            keynum = GetKeyNum(e);
            if (keynum === enter) {
                if(func !== undefined && func !== null) {
                    func();
                }
                return name_space.stifle(e);
            }
            return true; // submit
        }

        if (window.Event) {
            window.captureEvents(Event.KEYDOWN);
            window.onkeydown = catch_key;
        }
        else {
            document.onkeydown = catch_key;
        }

        if(name_space.is_ie === false) {
            document.onkeypress = catch_key;    
        }
    }
}

使用例:

$(function() {
    name_space.on_enter(
        function () {alert('hola!');}
    );
});

-2

使用する:

// Validate your form using the jQuery onsubmit function... It'll really work...

$(document).ready(function(){
   $(#form).submit(e){
       e.preventDefault();
       if(validation())
          document.form1.submit();
   });
});

function validation()
{
   // Your form checking goes here.
}

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