<input type="submit">
=====================

`<input>` 要素の **`submit`** 型は、ボタンとして描画されます。 `click` イベントが発生したとき（ふつうはユーザーがボタンをクリックしたとき）、ユーザーエージェントはサーバーへフォームを送信しようとします。

値
-

`<input type="submit">` 要素の `value` 属性は、ボタンのラベルとして表示される文字列を示します。ボタンはその他の真の値を持ちません。

### value 属性の設定


```html
<input type="submit" value="リクエストを送信" />
```

### value 属性の省略

`value` を指定しなかった場合、ボタンにはユーザーエージェントによって選ばれた既定のラベルが表示されます。このラベルは「送信」または「クエリを送信」などのものです。次のものはこのブラウザーにおける送信ボタンの既定のラベルです。


```html
<input type="submit" />
```

追加の属性
-----

すべての `<input>` 型で共通する属性に加え、 `submit` 型の入力欄は次の属性にも対応しています。

### formaction

文字列で、データの送信先の URL を示します。これはこの `<input>` が属する `<form>` 要素の `action` 属性より優先します。

この属性は `<input type="image">` および `<button>` 要素でも使用できます。

### formenctype

文字列で、フォームのデータをサーバーに送信する際に使われるエンコーディング方法を識別します。許されている値は 3 つです。

`application/x-www-form-urlencoded`

これは既定値で、フォームのデータを `encodeURI()` などのアルゴリズムを使って URL エンコーディングした後で送信します。

`multipart/form-data`

データを管理するために `FormData` API を使用し、複数のファイルをサーバーに送信することができます。フォームに `<input>` 要素の `type` が `file` (`<input type="file">`) が含まれている場合は、このエンコーディング型を*使わなければなりません*。

`text/plain`

プレーンテキストです。ほとんどデバッグでしか役に立ちませんが、送信されたデータを簡単に見ることができます。

`formenctype` 属性が指定された場合、所属するフォームの `action` 属性を上書きします。

この属性は `<input type="image">` および `<button>` 要素でも使用できます。

### formmethod

文字列で、フォームのデータを送信するときに使用する HTTP メソッドを示します。この値は所有者であるフォームの `method` を上書きします。許可されている値は次の通りです。

`get`

URL は `formaction` または `action` 属性で指定された URL に疑問符 ("?") を追加し、 `formenctype` または `enctype` 属性で指定された方法でエンコードされたフォームのデータが続くものになります。この URL は HTTP の `get` リクエストを用いてサーバーに送信されます。このメソッドは ASCII 文字のみを含む単純なフォームでうまく動作し、副作用はありません。これが既定値です。

`post`

フォームのデータは、 `formaction` または `action` で指定された URL に HTTP の `post` メソッドを用いて送信されるリクエストの本文に含められます。このメソッドは複雑なデータやファイルの添付に対応しています。

`dialog`

このメソッドは、入力欄が関連付けられたダイアログを閉じるだけで、フォームのデータをまったく送信しない場合ことを表すために使用します。

この属性は `<input type="image">` および `<button>` 要素でも使用できます。

### formnovalidate

論理属性で、存在する場合は、サーバーに送信する前にフォームの検証を行わないことを指定します。これは、自分自身で形成するフォームの `novalidate` 属性の値より優先されます。

この属性は `<input type="image">` および `<button>` 要素でも使用できます。

### formtarget

フォームを送信した後に受け取ったレスポンスを表示する場所を示す名前またはキーワードを指定する文字列です。この文字列は、**閲覧コンテキスト**（つまり、タブ、ウィンドウ、または `<iframe>`）の名前である必要があります。ここで指定された値は、この入力を所有している `<form>` の `target` 属性で指定された対象を上書きします。

タブ、ウィンドウ、インラインフレームなどの実際の名前の他に、使用できる特別なキーワードがいくつかあります。

`_self`

レスポンスを、形式を形成しているのと同じ閲覧コンテキストに読み込みます。これにより、現在の文書が受信したデータで置き換わります。これは、何も指定されなかった場合に使用される既定値です。

`_blank`

レスポンスを新しい、名前のない、閲覧コンテキストに読み込みます。これは通常、現在の文書内の同じウィンドウの新しいタブですが、ユーザーエージェントの設定によって異なる形となる場合があります。

`_parent`

現在の閲覧コンテキストの親コンテキストにレスポンスを読み込みます。親コンテキストがない場合は、 `_self` と同じ動作をします。

`_top`

レスポンスを最上位の閲覧コンテキストに読み込みます。これは、現在のコンテキストの最上位の祖先である閲覧コンテキストです。現在のコンテキストが最上位のコンテキストである場合、これは `_self` と同じように動作します。

この属性は `<input type="image">` および `<button>` 要素でも使用できます。

submit ボタンの使用
-------------

`<input type="submit">` ボタンはフォームを送信するために使用されます。もしカスタムボタンを作成し、JavaScript で動作をカスタマイズしたい場合は、`<input type="button">` か、より好ましくは `<button>` 要素を使用しなければいけません。

もしフォームのボタンを作成するのに `<button>` 要素を使用するのであれば、次のことに注意してください。`<button>` が `<form>` の中にある場合、そのボタンは "submit" ボタンとして扱われます。ですから、どのボタンが送信ボタンであるかを明示的に指定する習慣をつけるとよいでしょう。

### 単純な送信ボタン

まず、単純な送信ボタンを持つフォームを作成することから始めます。


```html
<form>
  <div>
    <label for="example">テキストを送信してみましょう</label>
    <input id="example" type="text" name="text" />
  </div>
  <div>
    <input type="submit" value="送信" />
  </div>
</form>
```


次のように表示されます。

テキストフィールドにいくらかテキストを入力してから、送信ボタンを押してみてください。

送信すると、データの名前と値のペアがサーバーに送信されます。この例では、文字列は `text=usertext` となります。"usertext" はユーザーが入力したテキストで、特殊文字を保持するためにエンコードされています。どこでどのようにデータを送信するかは `<form>` の設定によります。詳しくはフォームデータの送信を参照してください。

### 送信ボタンへのキーボードショートカットの追加

キーボードショートカットは、アクセスキーやキーボード相当物とも呼ばれ、ユーザーがキーボードのキーまたはキーの組み合わせを使ってボタンを発生させることができます。送信ボタンにキーボードショートカットを追加するには、それが意味をなす他の `<input>` と同じように、`accesskey` グローバル属性を使用してください。

この例では、 `s` がアクセスキーとして指定されています（`s` と、あなたのブラウザー/OS の組み合わせに応じた特定の修飾キーを押す必要があります）。ユーザーエージェント自身のキーボードショートカットとの競合を避けるために、ホストコンピュータ上の他のショートカットとは異なる修飾キーがアクセスキーに使用されます。詳しくは `accesskey` を参照してください。

以下は、前回の例に `s` アクセスキーを追加した例です。


```html
<form>
  <div>
    <label for="example">テキストを送信してみましょう</label>
    <input id="example" type="text" name="text" />
  </div>
  <div>
    <input type="submit" value="送信" accesskey="s" />
  </div>
</form>
```


例えば、 Mac 版 Firefox では `Control`-`Option`-`S` を押すと送信ボタンを起動しますが、Windows 版 Chrome では `Alt`+`S` を使用します。

上の例の問題点は、ユーザーがアクセスキーが何であるかを知らないということです。 特に、競合を避けるために変更する修飾子は通常標準的でないため、このようなことが起こります。サイトを構築する際には、サイトのデザインを邪魔しないような方法でこの情報を提供するようにしてください（例えば、サイトのアクセスキーが何であるかについての情報を指し示す、簡単にアクセスできるリンクを提供する）。ボタンにツールチップを追加する（`title` 属性を使用する）こともできますが、アクセシビリティの観点からは完全な解決策とは言えません。

### 送信ボタンの無効化と有効化

送信ボタンを無効にするには、 `disabled` 属性を、次のように指定してください。


```html
<input type="submit" value="送信" disabled />
```


実行時に `disabled` を `true` または `false` に設定することで、ボタンを有効にしたり無効にしたりすることができます。JavaScript では、 `btn.disabled = true` または `btn.disabled = false` のようになります。

**メモ:** ボタンの有効化や無効化についてのさらなる考えは、 `<input type="button">` ページを参照してください。

検証
--

送信ボタンは制約の検証には参加しません。制約を受ける実際の値を持っていません。

例
-

上に簡単な例を記載しています。送信ボタンについては、実のところこれ以上言うべきことはありません。この種のコントロールが「単純なボタン」と呼ばれることがあるのはそのためです。

|  |  |
| --- | --- |
| **値** | ボタンのラベルとして使用する文字列 |
| **イベント** | `click` |
| **対応している共通属性** | `type` および
 `value` |
| **IDL 属性** | `value` |
| **DOM インターフェイス** | `HTMLInputElement` |
| **メソッド** | なし |
| **暗黙の ARIA ロール** | `button` |

仕様書
---

| Specification |
| --- |
| HTML Standard # submit-button-state-(type=submit) |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `<input>` およびそれが実装している `HTMLInputElement` インターフェイス
* フォームとボタン
* HTML フォーム
* `<button>` 要素
* CSS プロパティの互換性