[html] jQuery 체크 박스 이벤트 처리

나는 다음을 가지고있다 :

<form id="myform">
   <input type="checkbox" name="check1" value="check1">
   <input type="checkbox" name="check2" value="check2">
</form>

jQuery를 사용하여 발생 하는 모든 체크 이벤트 를 캡처하고 어떤 체크 myform박스가 토글되었는지 (및 토글되었는지 여부) 알 수 있습니까?



답변

$('#myform :checkbox').change(function() {
    // this will contain a reference to the checkbox   
    if (this.checked) {
        // the checkbox is now checked 
    } else {
        // the checkbox is now no longer checked
    }
});


답변

변경 이벤트를 사용하십시오.

$('#myform :checkbox').change(function() {
    // this represents the checkbox that was checked
    // do something with it
});


답변

몇 가지 유용한 답변이 있지만 모든 최신 옵션 을 다루지는 않습니다 . 이를 위해 필자의 모든 예제는 일치하는 label요소가 있는지 확인하고 확인란을 동적으로 추가하고 결과를 측면 패널에 표시합니다 (리디렉션 console.log).

  • 듣기 click에 행사하는 checkboxes것입니다 하지 그 키보드 토글 또는 일치하는 경우 변경 사항을 허용하지 않으므로 좋은 아이디어 label요소를 클릭했다. 항상 change이벤트를 청취하십시오 .

  • :checkbox대신 jQuery 의사 선택기를 사용하십시오 input[type=checkbox]. :checkbox더 짧고 읽기 쉽습니다.

  • is()jQuery :checked의사 선택기 와 함께 사용 하여 확인란이 선택되어 있는지 테스트합니다. 이것은 모든 브라우저에서 작동합니다.

기존 요소에 첨부 된 기본 이벤트 핸들러 :

$('#myform :checkbox').change(function () {
    if ($(this).is(':checked')) {
        console.log($(this).val() + ' is now checked');
    } else {
        console.log($(this).val() + ' is now unchecked');
    }
});

JSFiddle : http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/

노트:

  • 용도 :checkbox사용하는 것이 바람직하다 선택기를,input[type=checkbox]
  • 이벤트가 등록 될 때 존재하는 일치하는 요소 에만 연결 됩니다 .

상위 요소에 연결된 위임 된 이벤트 핸들러 :

위임 된 이벤트 핸들러는 요소가 아직 존재하지 않는 (동적으로로드되거나 생성 된) 상황에 맞게 설계되었으며 매우 유용합니다. 그들은 조상 요소 (따라서 용어)에 책임을 위임 합니다.

$('#myform').on('change', ':checkbox', function () {
    if ($(this).is(':checked')) {
        console.log($(this).val() + ' is now checked');
    } else {
        console.log($(this).val() + ' is now unchecked');
    }
});

JSFiddle : http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/

노트:

  • change변경되지 않는 조상 요소 ( 이 경우 )로 버블 링하는 이벤트 (이 경우 )를 수신하여 작동합니다.#myform .
  • 그런 다음 jQuery 선택기 ( ':checkbox'이 경우)를 버블 체인 의 요소에만 적용합니다. .
  • 그런 다음 이벤트 핸들러 기능을 이벤트를 일으킨 일치하는 요소에만 적용합니다.
  • 사용 document아무것도 가까이 / 편리한없는 경우 기본값으로는 위임 된 이벤트 핸들러를 연결합니다.
  • body마우스 이벤트 수신을 중지 할 수있는 버그 (스타일링 관련)가 있으므로 위임 된 이벤트를 첨부 하는 데 사용하지 마십시오 .

위임 처리기의 결과는 일치하는 요소 가 이벤트 처리기 등록 시가 아니라 이벤트 시간 에만 존재해야한다는 것 입니다. 이를 통해 동적으로 추가 된 컨텐츠가 이벤트를 생성 할 수 있습니다.

Q : 느려요?

A : 너무 오래 이벤트가 사용자 상호 작용의 속도로 한, 당신이에 대해 걱정할 필요가 없습니다 무시할 위임 된 이벤트 핸들러와 직접 연결된 처리기 사이의 속도 차이. 대표단의 이점은 사소한 단점보다 훨씬 큽니다. 위임 된 이벤트 핸들러는 일반적으로 단일 일치 요소에 연결 되므로 실제로 등록 하는 것이 더 빠릅니다 .


왜하지 않는 prop('checked', true)화재 change이벤트를?

이것은 실제로 의도적으로 설계된 것입니다. 이벤트가 시작되면 끝없는 업데이트 상황에 쉽게 빠질 수 있습니다. 대신 checked 속성을 변경 한 후 trigger(not triggerHandler)을 사용하여 변경 요소를 동일한 요소에 보냅니다 .

예. trigger사건이없는 경우

$cb.prop('checked', !$cb.prop('checked'));

JSFiddle : http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/

예를 trigger들어 정상적인 변경 이벤트가 잡히면

$cb.prop('checked', !$cb.prop('checked')).trigger('change');

JSFiddle : http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/

노트:

  • 위임 된 이벤트 핸들러에 triggerHandler이벤트를 버블 링하지 않으므로 한 사용자가 제안한대로 사용하지 마십시오 .

JSFiddle : http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/

그것은 비록 됩니다 이벤트 핸들러 작동 에 직접 연결 요소에 :

JSFiddle : http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/

.triggerHandler ()로 트리거 된 이벤트는 DOM 계층을 버블 링하지 않습니다. 대상 요소가 직접 처리하지 않으면 아무 것도 수행하지 않습니다.

참조 : http://api.jquery.com/triggerhandler/

이 기능이 적용되지 않는 추가 기능이있는 사용자는 추가 기능을 제안하십시오 .


답변

jQuery (1.7)에서 새로운 ‘on’메소드 사용 : http://api.jquery.com/on/

    $('#myform').on('change', 'input[type=checkbox]', function(e) {
        console.log(this.name+' '+this.value+' '+this.checked);

    });
  • 이벤트 핸들러는 계속 작동합니다
  • 클릭이 아닌 키보드로 확인란을 변경하면 캡처됩니다.

답변

$('#myform input:checkbox').click(
 function(e){
   alert($(this).is(':checked'))
 }
)


답변

asker가 jQuery를 구체적으로 요청했으며 선택한 답변이 정확하다는 사실을 인정하면이 문제에는 실제로 jQuery 가 필요 하지 않습니다 . 문제 없이이 문제를 해결 onClick하려면 다음과 같이 추가 기능을 추가하려는 확인란 의 속성을 설정하면됩니다 .

HTML :

<form id="myform">
  <input type="checkbox" name="check1" value="check1" onClick="cbChanged(this);">
  <input type="checkbox" name="check2" value="check2" onClick="cbChanged(this);">
</form>

자바 스크립트 :

function cbChanged(checkboxElem) {
  if (checkboxElem.checked) {
    // Do something special
  } else {
    // Do something else
  }
}

피들 : http://jsfiddle.net/Y9f66/1/


답변

첫 번째 답변에서 코드를 사용해 보았습니다. 작동하지 않지만 놀았습니다.

$('#vip').change(function(){
    if ($(this).is(':checked')) {
        alert('checked');
    } else {
        alert('uncheck');
    }
});