Jquery复选框目标ID只有一个

时间:2013-03-13 05:07:11

标签: jquery checkbox prop

$(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个复选框是奖励!

4 个答案:

答案 0 :(得分:1)

您将无线电与复选框混合在一起。您还在DOM ready事件中包装DOM ready事件。你走了:

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

答案 1 :(得分:0)

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

即可
$('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')

答案 2 :(得分:0)

你的问题就像是

“但是......我需要它只影响下面的三个复选框!不是页面上的所有复选框!!!猜猜我不知道怎么让它只针对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);        
    }
});

答案 3 :(得分:0)

尝试类似

的内容
$(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