JavaScript (jQuery 또는 바닐라)로 확인란을 선택 / 선택 취소 하시겠습니까?


답변:


975

자바 스크립트 :

// 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); ```
Andrew Downes

3
우리는 오히려 사용해야 attrprop?
Black

15
분명히 이벤트를 .checked = true/false트리거하지 않습니다 change:-\
leaf

1
@albert : 왜 과제를 엄격한 평등성 테스트로 변경 했습니까? 당신은 답을 깨뜨 렸습니다.
Martijn Pieters

네 말이 맞아 그건 전적으로 나쁜 일입니다. 그것에 대해 죄송합니다
albert

136

아직 언급되지 않은 중요한 행동 :

checked 속성을 프로그래밍 방식으로 설정하면 change확인란 의 이벤트가 발생하지 않습니다 .

이 바이올린에서 직접보십시오 :
http://jsfiddle.net/fjaeger/L9z9t04p/4/

(Chrome 46, Firefox 41 및 IE 11에서 바이올린 테스트)

click()방법

언젠가는 코드가 작성되는 것을 발견 할 수 있는데, 이는 발생하는 이벤트에 의존합니다. 이벤트가 발생하는지 확인하려면 click()다음과 같이 확인란 요소 의 메소드를 호출하십시오 .

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

그러나,이 대신 구체적으로 설정하는 체크 박스의 체크 상태를 전환 true하거나 false. 기억 그 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
그건 좋은 대답이다하지만 개인적으로 내가 클릭을 호출하는 대신 변경 이벤트를 해고하는 것을 선호 () elm.dispatchEvent(new Event('change'));
빅터 Sharovatov

@VictorSharovatov 왜 변경 이벤트를 시작 하시겠습니까?
PeterCo

2
난 단지 부분적으로 동의 할 수 - AdBlocks 많은 웹 브라우저는 광고에서 인해 원치 않는 행동 가상 클릭 ()에서 DOM을 방어하는
pkolawa

2
@PeterCo : 아마도 의도를보다 명확하게 묘사하기 때문일 수 있습니다. 변경 이벤트를 발생시키는 요소를 클릭하고 변경 이벤트를 발생시키는 변경 이벤트를 전달하면 간접 (클릭 트리거 변경) 대 직접입니다. 후자는 상당히 명확하며 클릭이 변경 사항을 발생 시킨다는 것을 독자가 알 필요는 없습니다.
Bill Dagg

37

확인하다:

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

선택을 해제하려면 :

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

2
체크 된 속성 만 변경됩니다. 그러나 onclick 및 유사한 이벤트는 트리거되지 않습니다.
Paul Stelian

16

미립자 확인란을 다음과 같이 확인할 수 있습니다.

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

로 확인을 취소하고

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

1
하나의 요소 만 선택하는 경우 실제로 배열 인덱스가 필요하지 않습니다. 그러나 나는 당신이 명시 적이 길 원한다고 생각합니다. haha
Rizowski

6
당신은 기본 HTML 요소를 얻을 수있는 인덱스가 필요합니까 @Rizowski -의 jQuery 객체가없는 속성 "확인"
헨릭 크리스텐슨

이것은 나를 위해 일했습니다. 배열 색인이 없으면 정의되지 않은 오류가 발생했습니다. 정말 고마워 하루를 구 했어요
Neri

15

'checked'속성을 비어 있지 않은 문자열로 설정하면 확인란이 선택됩니다.

따라서 'checked'속성을 "false" 로 설정하면 확인란이 선택됩니다. 확인란을 선택하지 않도록 값을 빈 문자열, null 또는 부울 값 false 로 설정해야했습니다.


5
비어 있지 않은 문자열은 진실한 것으로 간주되기 때문입니다.
James Coyle

10

이 시도:

//Check
document.getElementById('checkbox').setAttribute('checked', 'checked');

//UnCheck
document.getElementById('chk').removeAttribute('checked');

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()체크 박스 요소에, 당신은 단순히 .checked를 재산 (AN 통해 직접 값을 변경할 수 있습니다 IDL 속성<input type="checkbox">).

참고 이렇게하면 일반적으로 관련 이벤트 (발생하지 않는 변화를 당신은 완벽한 솔루션을 가지고 수동으로 발사해야합니다 그래서) 그 모든 관련 이벤트 핸들러와 함께 작동합니다.

다음은 원시 자바 스크립트 (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를 지정하지 않았습니다.이 방법을 사용하는 경우 수행해야합니다) 또는 다른 방법으로 확장 할 수 있습니다. 마지막 두 가지는 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.