首页 文章

如何取消选中单选按钮?

提问于
浏览
422

在使用jQuery提交AJAX表单后,我想要取消选中一组单选按钮 . 我有以下功能:

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

在此功能的帮助下,我可以清除文本框中的值,但我无法清除单选按钮的值 .

顺便说一下,我也尝试了 $(this).val(""); 但是没有用 .

17 回答

  • 15
    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]

  • 7

    要么(普通的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() help page .
    prop()于2011年5月与jQuery 1.6一起推出 .

  • -2

    你不需要 each 函数

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

    要么

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

    同样适用于您的文本框:

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

    但你可以改善这一点

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

    尝试

    $(this).removeAttr('checked')
    

    因为很多浏览器会将'checked = anything'解释为true . 这将完全删除checked属性 .

    希望这可以帮助 .

  • 3
    $('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选择器 .

  • 29

    基于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);
    
  • 83

    谢谢帕特里克,你结束了我的一天!这是你必须使用的mousedown . 但是我改进了代码,因此您可以处理一组单选按钮 .

    //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;
        }
    }})());
    
  • 657

    将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 );
    
  • 4

    对于广播和广播组:

    $(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');
            }
        });
    });
    
  • 20

    试试这个,这将解决问题:

    $(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
                    }
                });
            });
    
  • 17

    尝试

    $(this).attr("checked" , false );
    
  • 1

    您还可以仅使用复选框模拟radiobutton行为:

    <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/

  • 4

    只需为jQuery添加以下代码:

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

    对于javascript:

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

    没有必要放任何foreach循环,.each()fubction或任何东西

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

    这几乎是好的,但你错过了[0]

    正确 - >> $(this)[0].checked = false;

  • 6

    您可以使用此JQuery取消选中radiobutton

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

    用这个

    $("input[name='nameOfYourRadioButton']").attr("checked", false);
    
  • 18
    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" >
    

    :d

相关问题