【问题标题】:Jquery checkbox target id's only oneJquery 复选框目标 id 的唯一一个
【发布时间】:2013-03-13 05:07:11
【问题描述】:
$(document).ready(function (){
$(function(){
    $('input:checkbox').prop('checked', false)
    $('input:checkbox').click(function(){
        if($(this).is(':checked')){
            $('input:checkbox').not(this).prop('checked', false);        
        }
    });
})
showdiv();

});

上面的代码效果很好!!首先,它使所有复选框“未选中”,然后它使一次只能选中“一个”复选框!

但是...我也需要它只影响下面的三个复选框!不是页面上的所有复选框!!!我猜我不知道如何让它只针对 id 的 co33、co34、co35..

<input name="option[13]" id="co33" value="33" checked="checked" onclick="showdiv()" type="radio"> 
<input name="option[14]" id="co34" value="34" checked="checked" onclick="showdiv()" type="radio">  
<input name="option[15]" id="co35" value="35" checked="checked" onclick="showdiv()" type="radio"> 

然后!!! ...如果其中一个被选中,那么这第四个复选框也会被选中!!如果以上三项都没有勾选,那么这一项也不勾选!

<input id="a1" type="checkbox" onclick="showdiv()" name="add[1]">

我希望结果是正确的.. html 是自动创建的,所以我不能让它们都具有相同的 id 或添加一个类,所以我想看看我是否可以通过 id 名称来定位它们.. 坦率地说,即使只是能够使最初发布的代码仅影响 3 个复选框将很棒。如果选中了三个复选框中的一个,则检查第 4 个复选框是一个奖励!

【问题讨论】:

    标签: jquery checkbox prop


    【解决方案1】:

    您将收音机与复选框混为一谈。您还将 DOM 就绪事件包装在 DOM 就绪事件中。给你:

    $(function(){
        $('input:checkbox').prop('checked', false);
        $('input:radio').prop('checked', false).filter(function(e){
            return (this.id == 'co33' ||
                    this.id == 'co34' ||
                    this.id == 'co35');
        }).on('click', function(){
            if($(this).is(':checked')){
                $('input:radio').not(this).prop('checked', false);
                $('#a1').prop('checked', true);
            }        
        });
        showdiv(); 
    });
    

    演示:http://jsfiddle.net/qUtQb/

    【讨论】:

      【解决方案2】:

      您可以使用属性选择器按名称定位它们,它的效率不是很高,但它会工作并且可能工作得很好。只需将您所有的 $('input:checkbox')s 更改为:

      $('input[name="option[13]"], input[name="option[14]"], input[name="option[15]"]')
      

      在点击处理程序的末尾(在 if 之外),执行:

      $('#a1').prop(
          "checked",
          $('input[name="option[13]"], input[name="option[14]"], input[name="option[15]"]')
             .is(':checked')
      );
      

      编辑:实际上,我只是注意到感兴趣组的 ID,点击它们会更快(并且输入更少)。使用选择器:

      $('#co33, #co34, #co35')
      

      【讨论】:

      • 是的!!!!这就是我的想法……只是不知道该怎么做! $('#co33, #co34, #co35')!!!你也涵盖了所有基础!我刚刚用 ids 和 bayuum 替换了 option13,14,15,第 4 个复选框也可以工作!!!!!!呸!!
      【解决方案3】:

      你的问题就像

      “但是......我也需要它只影响下面的三个复选框!不是页面上的所有复选框!!!猜我不知道如何让它只针对 id 的 co33、co34、co35..”

      <input name="option[13]" id="co33" value="33" checked="checked" onclick="showdiv()" type="radio"> 
      <input name="option[14]" id="co34" value="34" checked="checked" onclick="showdiv()" type="radio">  
      <input name="option[15]" id="co35" value="35" checked="checked" onclick="showdiv()" type="radio"> 
      

      并且您现在拥有HTML 中定义的上述 HTML 标记,它们是无线电而不是 checkbox

      所以试试

      $('input:radio').attr('checked', false)
      $('input:radio').click(function(){
          if($(this).is(':checked')){
              $('input:radio').not(this).attr('checked', false);        
          }
      });
      

      【讨论】:

      • 不建议使用attr更改checked值,改用prop
      【解决方案4】:

      试试类似的东西

      $(function(){
          var radios = $('input:radio[name^=option]').prop('checked', false)
          radios.click(function(){
              if($(this).is(':checked')){
                  $('input:radio[name^=option]').not(this).prop('checked', false);        
              }
      
              $('#a1').prop('checked', radios.is(':checked'))
          });
      
          showdiv();
      });
      

      演示:Fiddle

      【讨论】:

      • 非常感谢您的输入...我不懂语法,但我会玩这个,所以我可以学习,看起来像收音机.. 我不喜欢收音机的是你不能取消选择所有如果你试一试。你得刷新
      • @user2159909 那我推荐使用checkbox,可以达到同样的效果
      • 我要玩这个..我接受它^针对所有14,15..再次感谢
      猜你喜欢
      • 2014-01-11
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多