JavaScript, jQueryでチェックボックス状態の取得と設定

チェックボックスの状態取得や設定の方法の備忘録です。

ダイジェスト

  • チェックボックスのチェック状態を取得・設定する主要な方法は次の通り。
  • チェックボックスのチェック状態を取得するサンプルを次に示します。
  • チェックボックスのチェック状態を設定するサンプルを次に示します。
  • なお、.attr(‘checked’)では状態の取得や設定はできません。これは、属性とプロパティの違い(”Attributes vs. Properties”)に起因しています。
    • HTMLを作成する際に、<input id='id1' type='text'>等のように要素と属性を指定すると思いますが、ここでいう属性は内部的には「属性」と「プロパティ」に分かれています。
    • ブラウザは読み込んだHTMLをDOMオブジェクトに変換して保持しています。このDOMオブジェクトを作成するために使用されるのが「属性」、作成されたオブジェクトの現在の状態を保持するのが「プロパティ」になります。
    • jQuery1.6以前のattr()メソッドでは属性や一部プロパティの取得や設定ができました。jQuery1.7以降では、属性操作はattr()メソッド、プロパティ操作は.prop()メソッドを使用する設計に変更されました。
      (2021年5月現在、jQueryのバージョンは3.6であり、jQuery1.6は2011年リリースでかなり古いです。)
    • 後方互換のために最新の.attr()メソッドは従来同様に属性と一部プロパティの操作が可能ですが、checkedを含む次のプロパティに関しては、.attr()メソッドでは操作できず、.prop()メソッドを使用する必要があります。
      selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, defaultSelected
    • このようなプロパティに対して.attr()を使用した場合、HTMLで定義した初期値が返却されるようです。
      (“checked”属性が指定された場合は”checked”、未指定の場合はundefined)
    • 詳細は.attr().prop()のリファレンスにある”Attributes vs. Properties”欄ごご覧ください。

動作検証サンプル

前述の各方法で状態の取得や変更を行うサンプルを次に示します。
変更したチェックボックスの状態を各方法で取得して表示できます。各方法で状態を変更する場合は「変更」ボタンをクリックします。
.attr()の方法は機能しませんが参考として実装しました。.is()の方法は状態取得のみで状態を変更できないのでボタンを無効化しています。)

ソースコードは次の通りです。(gist)