클릭시 확인란이 선택되어 있지 않은지 확인하십시오-jQuery


86

사용자가 클릭 할 때 확인란이 선택 취소되었는지 확인하고 싶습니다. 그 이유는 사용자가 확인란의 선택을 취소 할 때 유효성 검사를하고 싶기 때문입니다. 하나 이상의 확인란을 선택해야하기 때문입니다. 따라서 마지막 항목을 선택 취소하면 자동으로 다시 확인됩니다.

jQuery를 사용하면 확인 여부를 쉽게 알 수 있습니다.

$('#check1').click(function() {
    if($(this).is(':checked'))
        alert('checked');
    else
        alert('unchecked');
});

하지만 실제로 확인란이 선택 취소되었는지 확인하는 if 문만 갖고 싶습니다.

그래서 다음 코드로 할 수 있다고 생각했습니다.

$('#check2').click(function() {
    if($(this).not(':checked'))
        alert('unchecked');
    else
        alert('checked');
});

그러나 이것은 항상 '확인되지 않음'메시지를 표시합니다. 내가 기대했던 것이 아닙니다 ...

데모 : http://jsfiddle.net/tVM5H/

그래서 결국 나는 다음과 같은 것이 필요합니다.

$('#check2').click(function() {
    if($(this).not(':checked')) {
        // Got unchecked, so something!!!
    }
});

그러나 분명히 이것은 작동하지 않습니다. 차라리 첫 번째 예제를 사용하고 싶지 않습니다. 왜냐하면 하나의 'if'문만 필요할 때 불필요한 'else'문이 있기 때문입니다.

먼저, 이것이 jQuery 버그입니까? 나에게 그것은 예상치 못한 행동이기 때문입니다. 둘째, 좋은 대안에 대한 아이디어가 있습니까?

답변:



50

이미 게시 된 답변이 작동합니다. jQuery를 사용하려면 다음을 수행 할 수 없습니다.

if ($(this).is(':not(:checked)'))

또는

if ($(this).attr('checked') == false)

이 답변의 첫 번째 예는 모든 옵션 중에서 가장 읽기 쉬운 것으로 보이므로 투표합니다.
Toby 1 Kenobi 2016 년

5

확인을 위해 jQuery? 정말?

if(!this.checked) {

면도칼로 바주카를 사용하지 마십시오.


4
jQuery를 사용하여 요소를 찾는 경우 다음과 같아야합니다.$(this)[0].checked
Chris

@HoldOffHunger 기본 입력 요소의 일부입니다. developer.mozilla.org/en-US/docs/Web/HTML/Element/input/… jQuery를 사용하는 경우 Chris는 위의 주석에 올바른 구문을 가지고 있습니다.
TheZ

@TheZ : 좋아요! 예, 맞습니다. Chris의 대답은 좋습니다. 제안 : 크레딧으로 답변을 추가 하시겠습니까? OP와 top 답변 모두 순수한 jQuery 솔루션 인 $ (selector) .is ( '...')쪽으로 기울어집니다. .checked그들이 가진 곳 에서만 사용 하는 .is('checked')것은 그 자체로 작동하지 않습니다.
HoldOffHunger

5
$(document).ready(function() {
        $("#check1").click(function() {
            var checked = $(this).is(':checked');
            if (checked) {
                alert('checked');
            } else {
                alert('unchecked');
            }
        });
    });


2

이 질문에 대한 몇 가지 답변을 확인하십시오. 귀하의 질문에 적용될 수 있다고 생각합니다.

요소의 기본 동작 후 클릭 기능을 실행하는 방법

onclick기능 의 브라우저 구현에서 불일치가 발생하고 있다고 생각합니다 . 일부는 이벤트가 시작되기 전과 후에 확인란을 토글하도록 선택합니다.


이것은 실제로 정말 중요합니다.
TheZ

이것이 jQuery가 확인하는 이유입니다. 정말. ;)
JoeBrockhaus

1

답변은 이미 게시되었지만 이러한 방식으로 jquery를 사용할 수도 있습니다.

데모

$(function(){
    $('#check1').click(function() {
        if($('#check1').attr('checked'))
            alert('checked');
        else
            alert('unchecked');
    });

    $('#check2').click(function() {
        if(!$('#check2').attr('checked'))
            alert('unchecked');
        else
            alert('checked');
    });
});

0

이렇게 해

if (typeof $(this).attr("checked") == "undefined" )

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")

이것은 단지 this.checked. 첫 번째 줄은 typeof거기에 필요하지 않습니다 (절대로 ReferencError). prop()대신 attr()부울을 반환하는 대신을 사용해야 두 번째 항목도 중복됩니다.
alex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.