라디오 버튼을 선택 해제하는 방법?


482

jQuery를 사용하여 AJAX 양식을 제출 한 후 선택 취소하려는 라디오 버튼 그룹이 있습니다. 다음과 같은 기능이 있습니다.

function clearForm(){
  $('#frm input[type="text"]').each(function(){
      $(this).val("");  
  });
  $('#frm input[type="radio":checked]').each(function(){
      $(this).checked = false;  
  });
 }

이 기능을 사용하면 텍스트 상자에서 값을 지울 수 있지만 라디오 버튼의 값을 지울 수는 없습니다.

그건 그렇고, 나는 또한 시도 $(this).val("");했지만 작동하지 않았습니다.


3
각 기능이 필요하지 않습니다. jQuery 객체에서 원하는 함수를 호출하면됩니다. 아래 내 답변보기
James Wiseman

1
each () 함수가 필요하지 않습니다. jQuery ( "input : radio"). removeAttr ( "checked");
Jitendra Damor

답변:


737

어느 쪽이든 (일반 js)

this.checked = false;

또는 (jQuery)

$(this).prop('checked', false);
// Note that the pre-jQuery 1.6 idiom was
// $(this).attr('checked', false);

attr ()prop () 의 차이점 과 prop ()이 선호 되는 이유에 대한 설명 은 jQuery prop () 도움말 페이지참조하십시오 . prop ()는 2011 년 5 월 jQuery 1.6과 함께 도입되었습니다.


29
PPL은 자신의 행동에 찬성 1.6에 변화 점에 유의 prop()하면서, .attr()실제 속성으로 제한됩니다
파비아누 Soriani을

여기서 일반 JS를 사용하는 것이 가장 좋습니까?
Doug Molineux 2016 년

14
@Pete : jQuery에 시스템을 구축하면 추가로 처리하는 브라우저가 있으면 브라우저 지원을 라이브러리에 위임 할 수 있다는 추가 이점이 있습니다. 그러나 소프트웨어에서 현재 jQuery를 사용하지 않는 경우 실제로이를 위해 라이브러리를 포함하는 것은 가치가 없습니다.
David Hedlund

@David Hedlund : 모든 주요 브라우저가 오늘날과 동일한 방식으로 처리한다는 것을 암시한다고 가정합니다.
Shawn

2
@ qris : 당신의 문제는 아마도 다른 곳일 것입니다. jQuery 1.9를 사용한 간단한 데모 . 물론 내 Chrome에서 작동합니다.
David Hedlund

88

each기능이 필요하지 않습니다

$("input:radio").attr("checked", false);

또는

$("input:radio").removeAttr("checked");

텍스트 상자에도 동일하게 적용됩니다.

$('#frm input[type="text"]').val("");

하지만 당신은 이것을 향상시킬 수 있습니다

$('#frm input:text').val("");

2
.removeAttr이 문제를 일으킬 가능성이 있습니다.
Kzqai 2016 년

어떻게 확장해야합니까? 아니면 링크를 제공 하시겠습니까?
James Wiseman

예, Kzqai, 나는 또한 이것에 대한 내 대답이 다운 투표 된 것을 궁금합니다. 이 문서에는 위험이 없습니다.
cjstehno

1
관련 문서는 실제로 .prop () 메소드에 있습니다. api.jquery.com/prop Quote "속성은 일반적으로 직렬화 된 HTML 속성을 변경하지 않고 DOM 요소의 동적 상태에 영향을줍니다. 예를 들어 입력 요소의 value 속성, disabled 속성 입력 및 버튼 또는 확인란의 checked 속성 .attr () 메서드 대신 .prop () 메서드를 사용하여 disabled 및 checked를 설정해야합니다. .val () 메서드는 값을 가져오고 설정하는 데 사용해야합니다. " 이 방법이 ...
Kzqai

1
... 이것은 .attr ()이 DOM 대신 직렬화 된 html 속성 인 .prop ()와 다른 기본 소스를 변경하고 현재 호환 가능할 수 있음을 의미합니다 (예 : jQuery 1.9는 .attr .prop ()이 정식 일 때 둘 다 수정하는 것이 보장되지는 않습니다. 예를 들어, .attr ( 'checked', false); 그리고 사용하는 라이브러리에는 .prop ( 'checked', true);가 포함되어 있으며 성가신 버그를 일으킬 수있는 내재 된 충돌이 있습니다.
Kzqai 2016 년

29

시험

$(this).removeAttr('checked')

많은 브라우저가 'checked = anything'을 true로 해석하므로 이것은 확인 된 속성을 모두 제거합니다.

도움이 되었기를 바랍니다.


또한 다른 답변 중 하나에서 언급했듯이 각 기능이 필요하지 않습니다. removeAttr 호출을 선택기에 연결하면됩니다.
cjstehno

6
참고 :이 답변은 2010 년입니다. 당시에는이 방법이 유효하고 승인 된 방법이었습니다. 그 이후에는 더 이상 사용되지 않습니다.
cjstehno

21

Igor의 코드를 기반으로 Laurynas의 플러그인을 약간 수정했습니다. 이는 대상으로하는 라디오 버튼과 관련된 가능한 레이블을 수용합니다.

(function ($) {
    $.fn.uncheckableRadio = function () {

        return this.each(function () {
            var radio = this;
                $('label[for="' + radio.id + '"]').add(radio).mousedown(function () {
                    $(radio).data('wasChecked', radio.checked);
                });

                $('label[for="' + radio.id + '"]').add(radio).click(function () {
                    if ($(radio).data('wasChecked'))
                        radio.checked = false;
                });
           });
    };
})(jQuery);

1
레이블이 사용되는 방법에 따라 달라집니다. ID를 사용하는 경우 라디오 코드가 레이블에 중첩되어 있으면이 코드가 작동합니다. 이 향상된 버전을 사용할 수 있습니다 : gist.github.com/eikes/9484101
eikes

20

고마워 패트릭, 당신은 내 하루를했다! 마우스 다운을 사용해야합니다. 그러나 코드를 개선하여 라디오 버튼 그룹을 처리 할 수 ​​있습니다.

//We need to bind click handler as well
//as FF sets button checked after mousedown, but before click
$('input:radio').bind('click mousedown', (function() {
    //Capture radio button status within its handler scope,
    //so we do not use any global vars and every radio button keeps its own status.
    //This required to uncheck them later.
    //We need to store status separately as browser updates checked status before click handler called,
    //so radio button will always be checked.
    var isChecked;

    return function(event) {
        //console.log(event.type + ": " + this.checked);

        if(event.type == 'click') {
            //console.log(isChecked);

            if(isChecked) {
                //Uncheck and update status
                isChecked = this.checked = false;
            } else {
                //Update status
                //Browser will check the button by itself
                isChecked = true;

                //Do something else if radio button selected
                /*
                if(this.value == 'somevalue') {
                    doSomething();
                } else {
                    doSomethingElse();
                }
                */
            }
    } else {
        //Get the right status before browser sets it
        //We need to use onmousedown event here, as it is the only cross-browser compatible event for radio buttons
        isChecked = this.checked;
    }
}})());

17

Igor의 코드를 플러그인으로 다시 작성하십시오.

사용하다:

$('input[type=radio]').uncheckableRadio();

플러그인:

(function( $ ){

    $.fn.uncheckableRadio = function() {

        return this.each(function() {
            $(this).mousedown(function() {
                $(this).data('wasChecked', this.checked);
            });

            $(this).click(function() {
                if ($(this).data('wasChecked'))
                    this.checked = false;
            });
        });

    };

})( jQuery );

라벨을 클릭하면 선택이 해제되지 않습니다. 따라서 레이블을 클릭하여 라디오를 선택할 수 있지만 선택 해제는 라디오 버튼 자체를 클릭해야만 작동합니다.
Simon Hürlimann

@ alkos333에는 레이블과 함께 작동하는 것처럼 보이는 솔루션이 있습니다.
Simon Hürlimann

레이블이 사용되는 방식에 따라 달라집니다. ID를 사용하는 경우 @ alkos333 코드가 작동하고 레이블에 라디오 버튼이 중첩되어 있으면이 버전을 사용하십시오. gist.github.com/eikes/9484101
eikes

16

라디오 및 라디오 그룹의 경우 :

$(document).ready(function() {
    $(document).find("input:checked[type='radio']").addClass('bounce');   
    $("input[type='radio']").click(function() {
        $(this).prop('checked', false);
        $(this).toggleClass('bounce');

        if( $(this).hasClass('bounce') ) {
            $(this).prop('checked', true);
            $(document).find("input:not(:checked)[type='radio']").removeClass('bounce');
        }
    });
});

14

이것을 시도하십시오, 이것은 속임수를 할 것입니다 :

        $(document).ready(function() {
           $("input[type='radio']").mousedown(function(e) {
                if ($(this).attr("checked") == true) {
                   setTimeout("$('input[id=" + $(this).attr('id') + "]').removeAttr('checked');", 200);}
                else {
                    return true
                }
            });
        });


9

확인란 만 사용하여 라디오 버튼 동작을 시뮬레이션 할 수도 있습니다.

<input type="checkbox" class="fakeRadio" checked />
<input type="checkbox" class="fakeRadio" />
<input type="checkbox" class="fakeRadio" />

그런 다음이 간단한 코드를 사용하여 작업 할 수 있습니다.

$(".fakeRadio").click(function(){
    $(".fakeRadio").prop( "checked", false );
    $(this).prop( "checked", true );
});

잘 작동하고 각 버튼의 동작을 더 잘 제어 할 수 있습니다.

http://jsfiddle.net/almircampos/n1zvrs0c/ 에서 직접 시도해 볼 수 있습니다.

이 포크를 사용하면 주석에서 요청한대로 모두 선택 해제 할 수 있습니다. http://jsfiddle.net/5ry8n4f4/


모든 상자의 선택을 취소 할 수 없다는 점을 제외하면 좋습니다.
Stefan

6

jQuery에 다음 코드를 넣으십시오.

jQuery("input:radio").removeAttr("checked");

그리고 자바 스크립트의 경우 :

$("input:radio").removeAttr("checked");

foreach 루프, .each () fubction 또는 어떤 것도 넣을 필요가 없습니다.


5

이것을 사용하십시오

$("input[name='nameOfYourRadioButton']").attr("checked", false);

4
$('#frm input[type="radio":checked]').each(function(){
   $(this).checked = false;  
  });

이것은 거의 좋지만 [0]을 놓쳤습니다.

수정->> $(this)[0].checked = false;


1
또는 단순히 :this.checked = false;
eikes

4

이 JQuery를 사용하여 선택 취소 라디오 버튼을 사용할 수 있습니다

$('input:radio[name="IntroducerType"]').removeAttr('checked');
                $('input:radio[name="IntroducerType"]').prop('checked', false);

1
function setRadio(obj) 
{
    if($("input[name='r_"+obj.value+"']").val() == 0 ){
      obj.checked = true
     $("input[name='r_"+obj.value+"']").val(1);
    }else{
      obj.checked = false;
      $("input[name='r_"+obj.value+"']").val(0);
    }

}

<input type="radio" id="planoT" name="planoT[{ID_PLANO}]" value="{ID_PLANO}" onclick="setRadio(this)" > <input type="hidden" id="r_{ID_PLANO}" name="r_{ID_PLANO}" value="0" >

:디


-2
$('input[id^="rad"]').dblclick(function(){
    var nombre = $(this).attr('id');
    var checked =  $(this).is(":checked") ;
    if(checked){
        $("input[id="+nombre+"]:radio").prop( "checked", false );
    }
});

확인 된 라디오를 두 번 클릭 할 때마다 확인 된 변경이 false로 변경됩니다.

id=radxxxxxxxx이 ID 선택기를 사용하기 때문에 라디오가 시작됩니다 .


3
답을 이해할 수있는 영어로 작성하십시오.
ericbn

@ericbn 누군가 영어를 모른다면?
AlphaMale

이 사이트의 @AlphaMale (은)는 공식 언어입니다.
10

@Cristik 모든 프로그래머가 "영어"국가에서 온 것은 아닙니다. 이 포럼에 게시 할 수 없다는 의미입니까? 둘째, 친구 2 년이되었습니다. 나에게 깨달음을 주셔서 감사합니다.
AlphaMale

-2
function clearForm(){
  $('#frm input[type="text"]').each(function(){
      $(this).val("");  
  });
  $('#frm input[type="radio":checked]').each(function(){
      $(this).attr('checked', false);  
  });
 }

올바른 선택은 다음과 같습니다 #frm input[type="radio"]:checked 하지#frm input[type="radio":checked]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.