2011-04-20 148 views
1

这涉及到另一个问题,我问,但更复杂(的问题在这里:jQuery - Able to disable checkboxes on condition, but odd problemjQuery的 - 多状态禁用复选框

我现在已经禁用基于选择框选择复选框工作代码:http://jsfiddle.net/gDHGY/2/

上面链接中的代码将根据年级级别禁用复选框。我需要进一步禁用基于其他复选框选择的复选框。例如,如果一个包含“am”和“week1”类的复选框被切换,我需要禁用所有其他的“am week1”复选框。还有一整天叫“全”。另一个例子是:如果选中了“全周1”类的复选框,我需要禁用“am week1”和“pm week1”复选框。总共有6周的营业时间,只有AM,PM和全天选项。我真的希望这一切都有道理。如果不是所有的方式让我知道,我会尽力解释更好。

是否有可能修改我必须这样做的代码,或者我正在使用二级代码来完成此操作?

编辑#2:再次更新上面的jsFiddle链接。

更新#1:Ian的代码工作得很好我只需要弄清楚如何在页面加载时检查复选框时如何使它运行相同的功能。

+0

你的意思是如果你切换“am week1”,另一个“pm week1”将会禁用?因为我没有看到任何其他与已启用复选框组合在一起的“week1” – 2011-04-20 06:09:40

+0

@Ian Jasper Bardoquillo你说的很对 - 我没有足够的复选框来完成这个场景。对于那个很抱歉。我刚刚将上面的链接更新为一个带有更多复选框的链接。 http://jsfiddle.net/gDHGY/1/ – Vincent 2011-04-20 06:34:08

+0

基于你更新的jsfiddle,我想知道你是否改变了类,或者逻辑也被改变了......如果我在第一周切换,例如什么checbox会禁用?我是否应该在第1周仍然查找并禁用它,或者适用新规则? – 2011-04-20 06:57:52

回答

2

请检查我的解决方案。希望这有助于:)

http://jsfiddle.net/gDHGY/3/

+0

非常有帮助,它的工作很好。你如何去做同样的事情,不仅仅是点击一个复选框,而且如果其中一个复选框在页面加载时被选中(如输入标签包含checked = yes)?谢谢伊恩。 – Vincent 2011-04-20 14:48:52

+0

欢迎来到文森特:)请将它标记为正确答案:) 那么这将如何呢?我是否应该首先在下拉列表中选择一个项目,然后查看是否有复选框被选中并触发事件? – 2011-04-21 01:53:29

+0

对不起,我以为我标记了它。完成。 :)在被选中的情况下,下拉选项也将被选中。我使用PHP根据会话变量填充数据,并且如果人员已经足够远以填充数据,那么已经在下拉框中选择了分数。这是我确保jQuery代码禁用基于等级的复选框工作在页面加载的原因之一,而不仅仅是用户输入。再次感谢! – Vincent 2011-04-21 03:50:35

0

从看你的代码,我想你需要的是一个事件绑定到你的复选框:

$('input[type=checkbox]').click(function() { 
    var classList = $(this).attr('class').replace(/\s+/g, "."); 
    if ($(this).attr('checked')) { 
     $('input.' + classList).attr('disabled', 'true'); 
     $(this).removeAttr('disabled'); 
    } else { 
     $('input.' + classList).removeAttr('disabled', 'true'); 
    } 
}); 

这并不能完全解决您的问题,因为它只禁用完全相同的类(即选择完整的week1不会禁用week1类),但是classList上的一些正则表达式来改变它所寻找的应该为您解决这个问题(对不起 - 这会自己做,但咖啡因的今天早上还没踢完)

+2

我看到伊恩提出了一个更好的解决方案 - 我会亲自去 – 2011-04-20 08:31:47