Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. HTML
  3. リファレンス
  4. 要素
  5. <input>
  6. <input type="checkbox">

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

<input type="checkbox">

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年7月⁩.

<input> 要素のcheckbox 型は、既定でボックスとして描画され、政府の書類で見られるように、有効な時にはチェックが入ります。正確な外見はブラウザーが実行されているオペレーティングシステムの構成によります。一般にこれは四角形ですが、角が丸くなることもあります。チェックボックスによって、フォームで単一の値を選択して(または選択せずに)送信することができます。

試してみましょう

<fieldset>  <legend>Choose your monster's features:</legend>  <div>    <input type="checkbox" name="scales" checked />    <label for="scales">Scales</label>  </div>  <div>    <input type="checkbox" name="horns" />    <label for="horns">Horns</label>  </div></fieldset>
p,label {  font:    1rem "Fira Sans",    sans-serif;}input {  margin: 0.4rem;}

メモ:ラジオボタンはチェックボックスと似ていますが、重要な違いがあります。同じ名前のラジオボタンはグループ化されており、同時に 1 つしか選択できないのに対し、チェックボックスは単一の値をオンにしたりオフにしたり切り替えることができます。複数のコントロールがある場所では、ラジオボタンはその中で一つしか選択できませんが、チェックボックスは複数の値が選択できます。

チェックボックスの値を表す文字列です。これはクライアント側には表示されませんが、サーバー上ではチェックボックスのname と共に送信されるデータに与えられるvalue になります。次の例を見てください。

html
<form>  <div>    <input      type="checkbox"           name="subscribe"      value="newsletter" />    <label for="subscribeNews">Subscribe to newsletter?</label>  </div>  <div>    <button type="submit">Subscribe</button>  </div></form>

この例では、namesubscribe に、valuenewsletter に設定しました。フォームが送信されると、データの名前と値の組み合わせはsubscribe=newsletter となります。

value 属性が省略された場合は、チェックボックスの既定値はon ですので、その場合の送信されるデータはsubscribe=on となります。

メモ:フォームが送信されたとき、チェックボックスがチェックされていない場合、名前も値もサーバーに送信されません。HTML のみでチェックボックスがチェックされていない状態を表す方法(value=unchecked のように)はありません。チェックボックスがチェックされていないときの既定値を送信したい場合は、JavaScript を記述して、フォーム内にチェックされていない状態を示す値を持つ<input type="hidden"> を作成することで実現できます。

追加の属性

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

checked

論理属性で、チェックボックスが既定で(ページが読み込まれたときに)チェックされているかどうかを示します。チェックボックスが現在チェックされているかどうかを示すものではありません。チェックボックスの状態が変化した場合、このコンテンツ属性は変化を反映しません。(HTMLInputElementchecked IDL 属性のみが更新されます。)

メモ:他の入力コントロールとは異なり、チェックボックスの値は現在checked の状態にある場合のみ、送信データに含まれます。その場合、チェックボックスのvalue 属性の値、またはvalue が設定されていない場合はon が入力欄の値として報告されます。他のブラウザーとは異なり、 Firefox は既定でページ読み込みを通して<input>チェック状態を維持します。この機能を制御するにはautocomplete 属性を使用してください。

value

value 属性はすべての<input> 要素で共通のものです。しかし、checkbox 型の入力欄では特殊な用途を提供します。フォームが送信されると、現在チェックされているチェックボックスのみがサーバーに送信され、報告される値がvalue 属性の値になります。value が指定されていない場合は、既定でon の文字列になります。これは前述のの節で紹介されています。

チェックボックスの使用

上記で最も基本的なチェックボックスの使用を見てきました。他に必要になりそうなチェックボックスに関するよく使われる機能や技術を見てみましょう。

複数チェックボックスの扱い

上記の例では、チェックボックスが 1 つしか含まれていませんでした。実際の状況では、複数のチェックボックスが発生する可能性があります。それらが互いに完全に無関係であれば、上記のようにすべて別々に処理できます。しかし、もしそれらがすべて関連していれば、事はそう単純ではありません。

例えば、次のデモにはユーザーが関心のあることを選択できるように、複数のチェックボックスが含まれています(完全な版はの節で確認してください)。

html
<fieldset>  <legend>関心があるものを選んでください</legend>  <div>    <input type="checkbox" name="interest" value="coding" />    <label for="coding">コーディング</label>  </div>  <div>    <input type="checkbox" name="interest" value="music" />    <label for="music">音楽</label>  </div></fieldset>

この例では、両方のチェックボックスに同じname を設定しました。両方のチェックボックスがチェックされてフォームが送信されると、名前/値の組み合わせの文字列はinterest=coding&interest=music のように送信されます。データがサーバー側に届いたときには、連想配列以外の方法で解析して、interest の値を持つ値を、最後の値だけでなくすべて拾う必要があります。 Python を使用したやり方としては、例えば、単一のサーバー側の変数で複数のチェックボックスを扱うを参照してください。

既定のチェックボックス

チェックボックスを既定でチェック状態にするには、checked 属性を設定するだけです。次の例を見てください。

html
<fieldset>  <legend>関心があるものを選んでください</legend>  <div>    <input type="checkbox" name="interest" value="coding" checked />    <label for="coding">コーディング</label>  </div>  <div>    <input type="checkbox" name="interest" value="music" />    <label for="music">音楽</label>  </div></fieldset>

チェックボックスの当たり判定領域を広げる

上記の例では、チェックボックス自身と同様に、関連する<label> 要素をクリックするとチェックボックスを切り替えられることに気づいたかもしれません。これは HTML フォームのラベルの本当に便利な機能で、特にスマートフォンのような画面の小さい端末でオプションをクリックしやすくなります。

これがフォームに<label> 要素を適切に設定する、アクセシビリティ以外のもう一つの理由です。

未決定状態のチェックボックス

チェックボックスは未決定 (indeterminate) 状態にすることができます。これは JavaScript からHTMLInputElement オブジェクトのindeterminate プロパティを使用して設定します(HTML の属性を使用して設定することはできません)。

js
inputInstance.indeterminate = true;

indeterminatetrue である場合、多くのブラウザーでは、チェックボックスにはボックス内にチェックの代わりに水平線(ハイフンやマイナス記号のように見えるもの)が引かれます。

メモ:これは純粋に視覚的な変更です。チェックボックスのvalue がフォーム送信に使用されているかどうかには影響しません。これはchecked の状態によって決定され、indeterminate の状態とは関係ありません。

このプロパティを使用する機会は多くありません。最もよくある例では、チェックボックスが複数のサブオプション(チェックボックス)を「統括」している場合です。すべてのサブオプションがチェックされたとき、統括しているチェックボックスもチェックされ、すべてのチェックボックスのチェックが外れたとき、統括しているチェックボックスもチェックが外れます。1 つ以上のサブオプションが他とは異なる状態にあるとき、統括しているチェックボックスは未決定の状態になります。

これは以下の例に見られます(この発想はCSS Tricks のおかげです)。この例では、製作手順のために収集する材料を追跡しています。材料のチェックボックスをオンまたはオフにすると、 JavaScript の関数はチェックされた材料の総数をチェックします。

  • チェックがない場合、製作手順名のチェックボックスは未チェックになります。
  • 1 つまたは 2 つがチェックされた場合、製作手順名のチェックボックスはindeterminate に設定されます。
  • 3 つともチェックされた場合は、製作手順名のチェックボックスがchecked に設定されます。

ですからこの場合は、材料を集め始めているものの、製作が完成していない状態にindeterminate が使われます。

js
const overall = document.querySelector("#enchantment");const ingredients = document.querySelectorAll("ul input");overall.addEventListener("click", (e) => {  e.preventDefault();});for (const ingredient of ingredients) {  ingredient.addEventListener("click", updateDisplay);}function updateDisplay() {  let checkedCount = 0;  for (const ingredient of ingredients) {    if (ingredient.checked) {      checkedCount++;    }  }  if (checkedCount === 0) {    overall.checked = false;    overall.indeterminate = false;  } else if (checkedCount === ingredients.length) {    overall.checked = true;    overall.indeterminate = false;  } else {    overall.checked = false;    overall.indeterminate = true;  }}

検証

チェックボックスは検証(すべての<input> に対して行われる)に対応しています。しかし、多くの場合ValidityState は常にfalse になります。チェックボックスにrequired 属性がある場合で、チェックされていない場合、ValidityState.valueMissingtrue になります。

次の例は、上で見た「複数のチェックボックス」の拡張版です。より標準的なオプションと、チェックされたときに「その他」オプションの値を入力する入力欄を表示させる「その他」チェックボックスがあります。これは JavaScript の短いブロックで実現します。この例では、<input> が直接<label> の中にあり、暗黙のラベルを含んでいます。目に見えるラベルのないテキスト入力は、aria-label を指定すると、指定されたアクセス可能な名前を提供することができます。この例では、スタイル設定を改善するためにいくつかの CSS も記載しています。

HTML

html
<form>  <fieldset>    <legend>興味のあるものを選択してください</legend>    <div>      <label>        <input type="checkbox" name="interest" value="coding" />        コーディング      </label>    </div>    <div>      <label>        <input type="checkbox" name="interest" value="music" />        音楽      </label>    </div>    <div>      <label>        <input type="checkbox" name="interest" value="art" />        美術      </label>    </div>    <div>      <label>        <input type="checkbox" name="interest" value="sports" />        スポーツ      </label>    </div>    <div>      <label>        <input type="checkbox" name="interest" value="cooking" />        料理      </label>    </div>    <div>      <label>        <input type="checkbox" name="interest" value="other" />        その他      </label>      <input        type="text"               name="other"        aria-label="Other interest" />    </div>    <div>      <button type="submit">フォームを送信</button>    </div>  </fieldset></form>

CSS

css
html {  font-family: sans-serif;}form {  width: 600px;  margin: 0 auto;}div {  margin-bottom: 10px;}fieldset {  background: cyan;  border: 5px solid blue;}legend {  padding: 10px;  background: blue;  color: cyan;}

JavaScript

js
const otherCheckbox = document.querySelector("#other");const otherText = document.querySelector("#otherValue");otherText.style.visibility = "hidden";otherCheckbox.addEventListener("change", () => {  if (otherCheckbox.checked) {    otherText.style.visibility = "visible";    otherText.value = "";  } else {    otherText.style.visibility = "hidden";  }});

技術的概要

チェックボックスの値を表す文字列。
イベントchange およびinput
対応している共通属性checked
IDL 属性checkedindeterminatevalue
DOM インターフェイスHTMLInputElement
メソッドselect()
暗黙の ARIA ロールcheckbox

仕様書

Specification
HTML
# checkbox-state-(type=checkbox)

ブラウザーの互換性

関連情報

  • :checked,:indeterminate: CSS のセレクターで、現在の状態に基づいてチェックボックスを整形できます
  • HTMLInputElement: HTML DOM API において<input> 要素が実装しているもの

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp