JavaScript(jQueryまたはvanilla)のチェックボックスをオン/オフにしますか?


回答:


975

JavaScript:

// Check
document.getElementById("checkbox").checked = true;

// Uncheck
document.getElementById("checkbox").checked = false;

jQuery(1.6以降):

// Check
$("#checkbox").prop("checked", true);

// Uncheck
$("#checkbox").prop("checked", false);

jQuery(1.5-):

// Check
$("#checkbox").attr("checked", true);

// Uncheck
$("#checkbox").attr("checked", false);

.propの使用は、ローカルでホストされているファイルを使用するFirefoxのJquery 1.11.2では機能しません。.attrは行います。私はもっ​​と完全にはテストしていません。これがコードです: `` `personContent.find(" [data-name = '"+ pass.name +"'] ")。children( 'input')。attr( 'checked'、true); `` `
アンドリューダウンズ2015年

3
私たちは、むしろ使用する必要がありますattrprop
ブラック

15
どうやらイベント.checked = true/falseはトリガーされませんchange:-\

1
@albert:なぜ割り当てを厳密な等価テストに変更したのですか?あなたは答えを破った。
Martijn Pieters

あなたが正しいです。それは完全に私の悪いです。申し訳ありません
アルバート

136

まだ言及されていない重要な動作:

プログラムでchecked属性を設定してchangeも、チェックボックスのイベントは発生しません

このフィドルで自分の目で確かめてください:http :
//jsfiddle.net/fjaeger/L9z9t04p/4/

(フィドルはChrome 46、Firefox 41、IE 11でテスト済み)

click()方法

いつか、発生するイベントに依存するコードを記述していることに気付くかもしれません。イベントが発生することを確認するにはclick()、次のように、checkbox要素のメソッドを呼び出します。

document.getElementById('checkbox').click();

しかし、これではなく、具体的にそれを設定するので、チェックボックスのチェックを状態を切り替えますtruefalse。このchangeイベントは、checked属性が実際に変更されたときにのみ発生することに注意してください。

また、jQueryの方法にも適用されます。propまたはを使用して属性を設定attrしても、changeイベントは発生しません。

checked特定の値に設定する

メソッドをchecked呼び出す前に、属性をテストできますclick()。例:

function toggle(checked) {
  var elm = document.getElementById('checkbox');
  if (checked != elm.checked) {
    elm.click();
  }
}

クリックメソッドの詳細については、https
//developer.mozilla.org/en-US/docs/Web/API/HTMLElement/clickをご覧ください。


8
これは良い答えですが、個人的には、click()を呼び出すのではなく、変更イベントを発生させる方がいいと思います elm.dispatchEvent(new Event('change'));
Victor Sharovatov

@VictorSharovatovなぜchangeイベントを発生させたいのですか?
PeterCo

2
部分的にしか同意できません-AdBlocksを備えた多くのWebブラウザーは、広告からの不要なアクションのために、仮想clicking()からDOMを防御しています
pkolawa

2
@PeterCo:おそらく意図がより明確に描かれているためです-要素をクリックして変更イベントを起動するか、変更イベントをディスパッチして変更イベントを起動します-間接的(クリックトリガーによる変更)と直接的なのです。後者はかなり明確であり、クリックが変化を引き起こすことを読者が知る必要はありません。
ビルDagg

37

チェックする:

document.getElementById("id-of-checkbox").checked = true;

チェックを外す:

document.getElementById("id-of-checkbox").checked = false;

2
これは、checked属性のみを変更します。ただし、onclickおよび同様のイベントはトリガーされません。
Paul Stelian

17

粒子状チェックボックスをチェックすると、

$('id of the checkbox')[0].checked = true

、チェックを外し、

$('id of the checkbox')[0].checked = false

1
要素を1つだけ選択する場合は、配列のインデックスは実際には必要ありません。しかし、あなたが明示的になりたいのであれば、私は推測します。笑
リゾウスキー、2015

6
@Rizowskiネイティブhtml要素を取得するにはインデックスが必要です-jQueryオブジェクトには「checked」プロパティがありません
Henrik Christensen

これでうまくいきました。配列インデックスがないと、未定義のエラーが発生しました。どうもありがとう、私の日を救った。
ネリ

15

'checked'属性を空でない文字列に設定すると、チェックボックスが表示されることに注意してください。

したがって、 'checked'属性を"false"に設定すると、チェックボックスがオンになります。チェックボックスがチェックされていないことを確認するために、値を空の文字列、null、またはブール値falseに設定する必要がありました。


5
これは、空でない文字列が真実と見なされるためです。
James Coyle、2016年


6
<script type="text/javascript">
    $(document).ready(function () {
        $('.selecctall').click(function (event) {
            if (this.checked) {
                $('.checkbox1').each(function () {
                    this.checked = true;
                });
            } else {
                $('.checkbox1').each(function () {
                    this.checked = false;
                });
            }
        });

    });

</script>

6
function setCheckboxValue(checkbox,value) {
    if (checkbox.checked!=value)
        checkbox.click();
}

3

何らかの理由で.click()、checkbox要素に対してを実行したくない(または実行できない)場合は、その.checkedプロパティ(IDL属性<input type="checkbox">)を使用して値を直接変更できます。

そうすることが、通常、関連するイベント(発生しませんというの変化をあなたはそれがすべての関連イベントハンドラで動作する完全なソリューションを持っているために、手動で火に必要になりますので)。

これは、未加工のJavaScript(ES6)の機能例です。

class ButtonCheck {
  constructor() {
    let ourCheckBox = null;
    this.ourCheckBox = document.querySelector('#checkboxID');

    let checkBoxButton = null;
    this.checkBoxButton = document.querySelector('#checkboxID+button[aria-label="checkboxID"]');

    let checkEvent = new Event('change');
    
    this.checkBoxButton.addEventListener('click', function() {
      let checkBox = this.ourCheckBox;

      //toggle the checkbox: invert its state!
      checkBox.checked = !checkBox.checked;

      //let other things know the checkbox changed
      checkBox.dispatchEvent(checkEvent);
    }.bind(this), true);

    this.eventHandler = function(e) {
      document.querySelector('.checkboxfeedback').insertAdjacentHTML('beforeend', '<br />Event occurred on checkbox! Type: ' + e.type + ' checkbox state now: ' + this.ourCheckBox.checked);

    }


    //demonstration: we will see change events regardless of whether the checkbox is clicked or the button

    this.ourCheckBox.addEventListener('change', function(e) {
      this.eventHandler(e);
    }.bind(this), true);

    //demonstration: if we bind a click handler only to the checkbox, we only see clicks from the checkbox

    this.ourCheckBox.addEventListener('click', function(e) {
      this.eventHandler(e);
    }.bind(this), true);


  }
}

var init = function() {
  const checkIt = new ButtonCheck();
}

if (document.readyState != 'loading') {
  init;
} else {
  document.addEventListener('DOMContentLoaded', init);
}
<input type="checkbox" id="checkboxID" />

<button aria-label="checkboxID">Change the checkbox!</button>

<div class="checkboxfeedback">No changes yet!</div>

これを実行してチェックボックスとボタンの両方をクリックすると、これがどのように機能するかを理解できます。

簡略化/簡略化のためにdocument.querySelectorを使用したことに注意してください。これは、特定のIDをコンストラクターに渡すか、チェックボックスのaria-labelsとして機能するすべてのボタンに適用できるように簡単に構築できます(注意:ボタンにIDを設定したり、チェックボックスにaria-labelledbyを指定したりする必要はありませんでした。これは、このメソッドを使用する場合に実行する必要があります)、またはこれを拡張する他のいくつかの方法です。最後の2つaddEventListenerは、それがどのように機能するかをデモするためのものです。


2

シングルチェックの場合

myCheckBox.checked=1
<input type="checkbox" id="myCheckBox"> Call to her

マルチトライ用


2

私は現在の回答に同意しますが、私の場合は機能しません。このコードが将来誰かを助けることを願っています:

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