アクションなしのフォームで、Enterキーを押すとページが再読み込みされません


94

送信ボタンがないHTMLフォームを作成する最も簡単な方法を探しています。それ自体は非常に簡単ですが、送信のようなこと(たとえば、Enterテキストフィールドでの入力)が行われたときにフォームが再読み込みされないようにする必要もあります。


送信しないようにしますか?
UpTheCreek 2009年

テキストフィールドである単一の<input>を持つ<form>だけがある場合、Enterキーを押したときに送信されるべきではありませんか?
Zack The Human

他の条件(実際には特定のボタンを押す)で送信したい。問題は、同じURLに投稿/取得するという「テキストフィールドに入力中」の動作が発生しないということです。したがって、X、Y、Zを実行して送信する必要がある私の注意深く作成されたフォームは、ユーザーがEnterキーを押すと誤って送信される可能性があります。
マットロバーツ

回答:


44

(プレーンなjsまたはjquery $()。submit(fn)を介して)onsubmitハンドラーをフォームに追加し、特定の条件が満たされない限りfalseを返します。

フォームを送信したくない場合を除き、フォーム要素の 'action'属性を省略しないのはなぜですか?


150
action標準によれば、属性のないフォームはフォームではなく、実際には一部のブラウザでページが再読み込みされます。私はそれaction="javascript:void(0);"がうまく機能していることを発見しました。
Dutchie432 '17年

ダッチの答えは完璧に機能します。Firefoxはページを更新していました。
IAmGroot 2012年

1
@ Dutchie432は、これをコメントではなく回答にする必要があります。それから、それはそれが属しているトップに向かいます。あるいは、アクションを省略してもうまくいかなかったので、KPrimeは彼の答えを調整することができました...
sage

210

action="javascript:void(0);"ページのリロードを防止し、HTML標準を維持するために、フォームに含める必要があります。


4
Enterが押されたときに送信ボタンのデフォルトアクションを抑制しようと2日間費やしただけです。アクションは実行されましたが、ページが再ロードされてしまったためです(Firefox)。フォームのアクションとしてjavascript voidを追加すると修正されました。それをありがとう。
トニーペイン、

この追加の回答に感謝します。これはまだ機能しますが、これは2016年の「最先端の」ソリューションですか?
low_rents 2016年

1
@low_rents私は今でもずっとそれを使っており、個人的にもっと良い解決策を見つけていません。
Dutchie432 2016年

1
Enterキーを押しながらページのリロードを解決するための正確で優れたソリューションをありがとう:)最良のソリューション。
Imran Rafiq Rather

9

このイベントをテキストフィールドに追加するだけです。これにより、Enterキーを押したときの送信が防止され、必要に応じて送信ボタンを追加したり、form.submit()を呼び出したりできます。

onKeyPress="if (event.which == 13) return false;"

例えば:

<input id="txt" type="text" onKeyPress="if (event.which == 13) return false;"></input>

1
有難うございます。あなたの回答の明確さが以前の回答の正確さを私に明らかにしていたので、あなたは受け入れられた回答を得ることができませんが、私の感謝と賛成票を得ることができます!
マットロバーツ

2
ありがとうございました。お役に立ててうれしいです。とにかく、私は脚光を浴びることはありませんでした。;)
GenericMeatUnit 2010

5

フォームでEnterキーを押すと、フォームの自然な動作が送信されることになります。この自然な動作を停止するには、jqueryを使用して送信しないようにする必要があります(デフォルトの動作)。

$("#yourFormId").on("submit",function(event){event.preventDefault()})

4

アイデア:

<form method="POST" action="javascript:void(0);" onSubmit="CheckPassword()">
    <input id="pwset" type="text" size="20" name='pwuser'><br><br>
    <button type="button" onclick="CheckPassword()">Next</button>
</form>

そして

<script type="text/javascript">
    $("#pwset").focus();
    function CheckPassword()
    {
        inputtxt = $("#pwset").val();
        //and now your code
        $("#div1").load("next.php #div2");
        return false;
    }
</script>

1

解決する2つの方法:

  1. フォームのアクション値は「javascript:void(0);」です。
  2. 送信を防ぐために、フォームのkeypressイベントリスナーを追加します。

キープレスイベント(Enterキーなど)をリッスンすると、textareas に問題が発生する可能性があり、オートコンプリートまたはドロップダウンを選択する可能性があります。モバイルは別の問題の原因となる可能性があります。
ラッキードナルド

0

最初の応答が最良の解決策です。

フォームにonsubmitハンドラーを(プレーンなjsまたはjquery $()。submit(fn)を介して)追加し、特定の条件が満たされない限りfalseを返します。

jqueryでより具体的に:

$('#your-form-id').submit(function(){return false;});

フォームを送信したくない場合を除き、フォーム要素の 'action'属性を省略しないのはなぜですか?

Chrome拡張機能の記述は、ユーザー入力用のフォームがある場合の例ですが、フォームを送信したくない場合です。action = "javascript:void(0);"を使用する場合、コードはおそらく機能しますが、インラインJavaScriptの実行に関するエラーが発生するこの問題発生します。

アクションを完全に省略した場合、フォームが再ロードされます。これは、Chrome拡張機能を作成するときに望ましくない場合もあります。または、ユーザーが何らかの入力を行い、「計算」またはそのようなものをクリックする、組み込みの計算機のようなWebページがある場合。

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