フォームを送信しないHTMLボタン


370

フォームがあります。そのフォームの外に、ボタンがあります。次のようなシンプルなボタン:

<button>My Button</button>

それにもかかわらず、それをクリックすると、フォームが送信されます。コードは次のとおりです。

<form id="myform">
    <input />
</form>
<button>My Button</button>

このボタンで実行する必要があるのはJavaScriptです。しかし、上記のコードのように見えても、フォームを送信します。タグボタンをスパンに変更すると、完全に機能します。しかし、残念ながら、それはボタンである必要があります。そのボタンがフォームを送信しないようにブロックする方法はありますか?例えば

<button onclick="document.getElementById('myform').doNotSubmit();">My Button</button>

3
この問題は最新のブラウザでは再現できません。また、問題は元々誤解が原因である可能性があります。のデフォルトはですbuttontype=submitbutton要素がフォームの外側にある場合は送信されるフォームはありません。実際のデモンストレーション(サンプルドキュメント、ブラウザの識別、および何らかのフォームが送信されたことを示す所見の説明)を提供できない場合を除き、この質問は再現性がないものとしてクローズする必要があります。使用することtype=buttonは良い習慣ですが、これは問題を現実のものにするものではありません。
Jukka K.Korpela、2014年

回答:


894

これは、HTMLの最も厄介な小さな特殊性だと思います...そのボタンは、送信しないように「ボタン」タイプである必要があります。

<button type="button">My Button</button>

2019年2月5日更新:HTML Living Standard(およびHTML 5仕様)に従って:

欠損値のデフォルト無効な値のデフォルトは、サブミットボタンの状態です。


9
@Powerslaveしない理由to use <button>
Sandip

4
@SandipPingle本当に複雑な種類のスタイリングが必要でない限り、使用する理由はありません。また、IE6とIE7(段階的に廃止予定)では、が<button>正しく処理され ない場合があります。さらに、フォームで使用した場合<button>、ブラウザごとに異なる値が送信される可能性があるという点で、100%クロスブラウザ互換ではありません<button>
Powerslave 2014

35
これはすばらしい答えですが、特異性ではありません。タグのtype属性のデフォルト値<button>submitです。に変更するtype=buttonと、<button>デフォルトの動作は提供されません。typeここの属性を参照してください:developer.mozilla.org/en-US/docs/Web/HTML/Element/button
Michael Benjamin

1
それで、<button type='submit'>それは私にとっては難しいことだと思います。とにかくあなたの答えは素晴らしいです!
divHelper11 2017

2
フォーム固有ではない要素のデフォルトの(したがって暗黙的な)動作は、潜在的に破壊的なフォーム固有の機能をトリガーすることです。これは、HTML仕様が行う特定の設計決定ではないのですか?
HonoredMule

36

return false;onclickハンドラーの最後でこの処理を行います。ただし、単純にを追加type="button"する方が良い<button>です。これにより、JavaScriptがなくても適切に動作します。


1
フォームを送信しないボタンは、JavaScriptが有効になっている場合にのみ役立ちます... type = "button"の方がきれいだと私は同意します。
ThiefMaster

2
return false;すべてのシナリオで機能するわけではありませんが、type="Button"機能します。JavaScriptを有効にしても。
brejoc 2014

15

デイブ・マークルは正しいです。W3Schoolのウェブサイトから:

常にボタンのtype属性を指定します。Internet Explorerのデフォルトのタイプは「ボタン」です​​が、他のブラウザ(およびW3C仕様)では「送信」です。

つまり、使用しているブラウザはW3Cの仕様に従っています。


15

デフォルトでは、htmlボタンはフォームを送信します。

これは、フォームの外側にあるボタンでも送信者として機能するためです(W3Schools Webサイトを参照してくださいhttp : //www.w3schools.com/tags/att_button_form.asp)。

つまり、ボタンタイプはデフォルトで「送信」です。

<button type="submit">Button Text</button>

したがって、これを回避する簡単な方法は、ボタンタイプを使用することです。

<button type="button">Button Text</button>

その他のオプションには、ボタンがクリックされたときのonclickまたはその他のハンドラーの最後にfalseを返すことや、代わりに<input>タグを使用することが含まれます。

詳細については、Mozilla Developer Networkのボタンに関する情報をご覧ください。https//developer.mozilla.org/en/docs/Web/HTML/Element/button


3

<Button>タグを使用しないことをお勧めします。<Input type='Button' onclick='return false;'>代わりにタグを使用してください。(「return false」を使用しても、フォームは送信されません。)

いくつかの参考資料


2
これは、使用するのに十分だ<input type="button" />、とのそれの十分はreturn false;-の両方を行う必要はありません。
トム

buttonタグを使用しないことが推奨されることに同意しません。これを使用しないと、ボタンタグで自動的に取得できるユーザー補助機能の一部が失われます。ボタンとして機能する要素には、実際にはボタンタグが推奨されると思います。
CookieMonster 2017年

リンクした参考資料のメモによると、「ボタン型の<input>要素はまだ完全に有効なHTMLですが、新しい<button>要素はボタンを作成するための好ましい方法です。」だから、あなたが言ったのと全く反対です。
jedzej

1

アクセシビリティの理由から、私は複数のtype=submitボタンでそれを引き出すことができませんでした。だけでネイティブの仕事への道form複数のボタンではなくONLY当たったときに1がフォームを送信することができますEnterキーは、それらの一方のみがであることを確認することですtype=submit他の人のような他のタイプにいる間type=button。このようにして、キーボードサポートの観点から、ブラウザー上のフォームを処理する際のユーザーエクスペリエンスが向上します。


0

私にとってうまくいったもう1つのオプションは、onsubmit = "return false;"を追加することでした。フォームタグに。

<form onsubmit="return false;">

意味的には、ボタンの種類を変更する上記の方法ほど良い解決策ではないかもしれませんが、フォーム要素を送信したくないだけの場合は、オプションのようです。

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