input type =“ submit”とbuttonタグは交換可能ですか?


233

input type="submit"buttonタグは交換可能ですか?または、違いがある場合は、いつ使用しinput type="submit"、いつ使用しbuttonますか?

そして、違いがない場合、なぜ同じ目的で2つのタグがあるのでしょうか。



IEのバージョンによっては、使用中におかしな日を避けてください。一部のバージョンのIEでは、期待どおりのものが送信されます。IEの一部のバージョンでは、s でうまく機能しません。buttonvalueinputbutton
ルーベンスマリウッゾ2013

答えは基本的と同じですinput type="button"VS button type=buttonstackoverflow.com/questions/469059/...
チロSantilli郝海东冠状病六四事件法轮功

回答:


131

http://www.w3.org/TR/html4/interact/forms.html#h-17.5

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

したがって、機能性のみが交換可能です!

(忘れないでください。これtype="submit"はのデフォルトなbuttonので、オフにしてください!)


7
IE6はページ上のすべてのボタンの値を送信するため、クリックされたボタンを正確に特定することが難しいことに注意してください。説明:vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam

6
ちょうどFYIあなたはしていない持って使用するtype="submit"ためには、デフォルトとして、ボタンです。typesubmit
2015

8
これがW3Cの発言ですが、typeデフォルトがであるケースを見たことがあると思いますbutton。ブラウザの不整合を回避するために、各属性を明示することを好みます。
MatTheCat

5
参照はいによると。しかし、すべてのブラウザが参照仕様に固執しているわけではありませんよね?
EKanadily 2016

2
@chharvey、前者は子ノードを持つことはできません。つまり、非テキストコンテンツ。簡潔さは別として、後者が存在する理由にはならないと言えるかもしれません。
Paul Draper

71

<input type="button">ただボタンであり、それ自体で何もしません。は<input type="submit">、フォーム要素内にある場合、クリックするとフォームを送信します。

別の便利な「特別な」ボタンは<input type="reset">、フォームをクリアするボタンです。


5
問題は<input type = "button">ではなくボタンタグに関するものです
Caltor

7
質問は約ある<input><button>タグ。<input>回答に有用な情報を提供しましたが、それは<button>側面が欠けています。
2017年

43

<input type = "button" ..>の代わりに<button>タグを使用します。これは、ブートストラップ3で推奨される方法です。

http://getbootstrap.com/css/#buttons-tags

「クロスブラウザレンダリング

ベストプラクティスとして、可能な場合は常に<button>要素を使用して、ブラウザー間のレンダリングが一致するようにすることを強くお勧めします。

特に、Firefoxのバグがあり、<input>ベースのボタンの行の高さを設定できないため、Firefoxの他のボタンの高さと正確に一致しません。」


4
+1。 buttonははるかに明示的で、ariaアクセシビリティ機能を備えており、スタイルを設定するのがはるかに簡単です。また、HTML5であるため、先進的です。
user1429980 2015年

37

どちらの要素でも機能的には同じ結果が得られますが<button> *、以下を使用することを強くお勧めします

  • はるかに明確で読みやすい。 inputコントロールが編集可能であるか、ユーザーが編集できることを示唆しています。buttonそれが果たす目的の点ではるかに明確です
  • CSSでのスタイル設定が簡単です。上記のように、FIrefoxとIEにはinput[type="submit"]、場合によっては正しく表示されない癖があります
  • 予測可能なリクエスト:値がサーバーへのPOST/ GETリクエストで送信されると、IEは動作を非常に強くします
  • マークアップに対応。ボタン内にアイコンなどのアイテムをネストできます。
  • HTML5、前向きな考え。開発者として、公式化された新しい仕様を採用するのは私たちの責任です。現在、HTML5は1年以上公式に公開されており、多くの場合、SEO向上させることが示されています。

* デフォルトで指定された動作がない場合を除きます。<button type="button">

要約すると、私はの使用を強くお勧めしません<input type="submit" />


ありがとうございました。特にHTML5のセマンティックポイントについて、これを探していました。2020年には、純粋な機能を超えて考える必要があります。
pierre_loic

27

<input type='submit' />単一の自己終了タグであるため、内部のHTMLはサポートされていません。<button>一方、はタグペアであるため、HTMLや画像などを内部でサポートしています<button><img src='myimage.gif' /></button><button>CSSスタイリングに関しては、より柔軟です。

の欠点は<button>、古いブラウザでは完全にはサポートされていないことです。たとえば、IE6 / 7では正しく表示されません。

特定の理由がない限り、に固執するのがおそらく最善<input type='submit' />です。


1
答えは2年前からでした。また、別のボタンのテキストを指定するには、非常に多くのことが可能です:<input type="submit" value="Log In" />
ジャレドン

2
@nailerあなたは完全にあなたの意見を受ける権利がありますが、どんな答えでも必然的に現在のテクノロジーの状態を参照することになります。たぶん、HTML 6は<button>何か新しいものを支持して廃止されるでしょう。特定のタグは将来的に変更される可能性があるため、回答で特定のタグについて言及すべきではないということですか?私はそれを読者への演習として残して、答えが彼らの状況にどのように当てはまるかを決定したいと思います。その情報が読者にとって価値がある限り、私はそれを含めることに問題はないと思います。
Jared Ng

1
回答が書かれた時点では、IE6 / 7はすでに古くなっています。あなたの投稿を読んで、それを支持する議論をチェックし、それらがもはや適用されないことに気付かずに新しいウェブ開発者は、「ボタン」要素を使用しない正当な理由があると思います。
mikemaccana 2013

2
@nailer誰もが支持する普遍的な「古い」ブラウザリストはありません。サポートされるブラウザーの要件は、職場によって異なります。2011年の「サポートされているブラウザ」の標準にIE6 / 7が含まれていなかったからといって、それがすべてのケースに当てはまるわけではありません。
Jared Ng

1
普遍的な「古くなった」ブラウザリストがないことは承知しています。したがって、すべてがそのようなことについて言及しているわけではありません。私が言っているのは、これは「IE6 / 7は表示ボタンを正しくサポートしていない。それが問題である場合は、入力に固執する」と言い換えることができるということです。これにより、IE6の回避策でStackOverflowが永久に一時停止するのを防ぎます。
mikemaccana 2013

14

これは古い質問だと思いますが、mozilla.orgで見つけて当てはまると思います。

ボタンには、送信、リセット、ボタンの3つのタイプがあります。送信ボタンをクリックすると、要素のaction属性で定義されたWebページにフォームのデータが送信されます。

リセットボタンをクリックすると、すべてのフォームウィジェットがすぐにデフォルト値にリセットされます。UXの観点からは、これは悪い習慣と見なされます。

ボタンボタンをクリックしても、何も起こりません。ばかげているように思えますが、JavaScriptを使用してカスタムボタンを作成するのは驚くほど便利です。

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/My_first_HTML_form#And_a_<button>_to_finish


何もしない場合、どのように役立ちますか?
ハニー

4
その後、JavaScriptを介してハンドラーをクリックイベントにフックできます
fonso '31

たとえば@Honeyをコーディング<button type="button">して、スライダー/カルーセルを次のスライドに進めることができます。
chharvey、2018

11

<button>はより新しく<input type="submit">、よりセマンティックで、スタイル設定が簡単で、HTMLをサポートしています。


8

他の答えは素晴らしいですし、質問に答えますが、input type="submit"およびを使用するときに考慮すべきことが1つありbuttonます。input type="submit"あなたが使用することはできません入力にCSS擬似要素をしかし、あなたができるボタンのための!

これはbutton、スタイリングに関して入力よりも要素を使用する理由の1つです。


3

これがバグなのか機能なのかはわかりませんが、私が見つけた非常に重要な(少なくとも場合によっては)違いがあります。<input type="submit">リクエストにキーと値のペアを作成しますが、作成<button type="submit">しません。ChromeとSafariでテスト済み。

したがって、フォームに複数の送信ボタンがあり、どのボタンがクリックされたかを知りたい場合はbutton、使用せずに、input type="submit"代わりに使用してください。


私の経験から、まったく逆の方法で、ボタンは$ _POST ["submit_name"]を渡し、入力は渡しません。クロムでテスト。Firefoxは常に$ _POST ["submit_name"]を送信します。
Gall Annonim

@GallAnnonim多分それはドキュメントの種類に依存します。私は間違いなくinput type = submitを使用し、それが
Chrome

intresting ...違いがある場合は、lang "pl" &&エンコーディングutf-8を使用して<!DOCTYPE html>を使用しました。クロムは58.0.3029.96です
Gall Annonim '19年

-2

について話している場合<input type=button>、フォームは自動的に送信されません

<button>タグについて話している場合、それはより新しいものであり、すべてのブラウザーで自動的に送信されるわけではありません。

結論として、すべてのブラウザーでクリック時にフォームを送信したい場合は、 <input type="submit">


14
<button type="submit">フォームの自動送信に使用できます。
jumpnett 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.