2013-02-04 80 views
3

我有禁用行中的所有复选框,并作为托运标志着他们一个jQuery脚本:如何禁用和取消选中复选框上的复选框?

$(function() { 
    enable_cb(); 
    $("#group1").click(enable_cb); 
}); 

function enable_cb() { 
    if (this.checked) { 
    $("input.group1").attr("disabled", true); 
    $("input.group1").attr("checked", true); 
    } else { 
    $("input.group1").removeAttr("disabled","checked"); 

    } 
} 

这是我拨弄HTML:http://jsfiddle.net/3fksv/16/

我想要的复选框的其余部分以显示活动再次,取消选中复选框取消选中。我在脚本中做了什么错误?

+2

尝试使用'.prop'取代'.attr' –

+1

您的来电enable_cb()上的document.ready将使this.checked是未定义。这就是它没有正确初始化的原因。与attr你需要使用'checked' – abc123

回答

2

我不认为你可以一次删除两个属性。您可能需要使用两次调用removeAttr()功能 -

$("input.group1").removeAttr("disabled"); 
$("input.group1").removeAttr("checked"); 

由于@nickf正确提到的,这些命令也可以链接 -

$("input.group1").removeAttr("disabled").removeAttr("checked"); 
+0

你可以,但他们必须是一个单一的空格分隔字符串 –

+1

你可以链接它虽然 – nickf

+2

它在文档中...“一个属性删除;从版本1.7,它可以是空格分隔的属性列表。“ –

5

checkeddisabled的特性,在jQuery 1.6的修改应使用prop方法代替attr

function enable_cb() { 
    $("input.group1") 
     .prop("disabled", this.checked) 
     .prop("checked", this.checked); 
} 

http://jsfiddle.net/JeqE5/

+0

[有关removeAttr()](http://api.jquery.com/removeAttr/)的文档只针对'.prop()'来讨论IE6/7/8的问题,对我来说似乎不是很清楚:(感谢您的回答 – FelipeAls

+1

这个工程很棒,但不起作用在我的页面上:( – boy

+0

@Christo您是否看到控制台上有任何错误?您使用的是哪个版本的jQuery? – undefined

0

DEMO:http://jsfiddle.net/3fksv/18/

function enable_cb() { 
    if (this.checked) { 
     $("input.group1").attr("disabled", 'disabled'); 
     $("input.group1").attr("checked", 'checked'); 
    } else { 
     $("input.group1").removeAttr("disabled","checked"); 
    } 
} 

$(function() { 
    $("input.group1").attr("disabled", 'disabled'); 
    $("input.group1").attr("checked", 'checked'); 
    $("#group1").click(enable_cb); 
});