2012-06-12 98 views
0

我想要有一个jquery函数,当任何复选框被点击并且基于点击的复选框的值字段时,它将被激活它将禁用或启用其他复选框。复选框使用jQuery启用/禁用

到目前为止,我有:

$(function() { 
    $('input [type="checkbox"]').click(function() { 

    }); 
}); 

好了,我已经取得了一些进展..但它仍然没有工作。

<script type="text/javascript"> 
$(function() { 
    $(':checkbox').click(function() { 

     $value = $(this).attr('value'); 

     if ($(this).is(':checked')) 
     { 
      switch ($value) 
      { 
       case "BLIPA": 
        $(':checkbox[value*="B"]').attr('disabled', true); 
      } 
     } 
     else 
     { 
      $(':checkbox').each(function() 
      { 

      } 
     } 
    }); 
}); 

我有没有犯任何错误?

编辑:

好吧,我已经解决了它。这里是解决方案:

所有的
<script type="text/javascript"> 
$(function() { 
    $("input[type='checkbox']").click(function() { 

     var value = $(this).attr('value'); 

     if ($(this).is(':checked')) { 

      var modules = FindModuleRules(value); 

      $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', true); 
      $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', true); 
      $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', true); 
      $(':checkbox[value~="' + value + '"]').attr('disabled', false); 

     } 
     else { 
      var modules = FindModuleRules(value); 

      $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', false); 
      $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', false); 
      $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', false); 
     } 
    }); 

    function FindModuleRules(string) { 

     var modules = new Array(); 

     var bRegex = /B/; 
     var lRegex = /L/; 
     var aRegex = /A/; 

     if (string.search(bRegex) != -1) 
      modules[0] = "B"; 
     else 
      modules[0] = "X"; 
     if (string.search(lRegex) != -1) 
      modules[1] = "L"; 
     else 
      modules[1] = "X"; 
     if (string.search(aRegex) != -1) 
      modules[2] = "A"; 
     else 
      modules[2] = "X"; 

     return modules; 
    } 

}); 

回答

0

我已经回答了这个问题。感谢所有的帮助。

<script type="text/javascript"> 
$(function() { 
    $("input[type='checkbox']").click(function() { 

     var value = $(this).attr('value'); 

     if ($(this).is(':checked')) { 

      var modules = FindModuleRules(value); 

      $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', true); 
      $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', true); 
      $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', true); 
      $(':checkbox[value~="' + value + '"]').attr('disabled', false); 

     } 
     else { 
      var modules = FindModuleRules(value); 

      $(':checkbox[value*="' + modules[0] + '"]').attr('disabled', false); 
      $(':checkbox[value*="' + modules[1] + '"]').attr('disabled', false); 
      $(':checkbox[value*="' + modules[2] + '"]').attr('disabled', false); 
     } 
    }); 

    function FindModuleRules(string) { 

     var modules = new Array(); 

     var bRegex = /B/; 
     var lRegex = /L/; 
     var aRegex = /A/; 

     if (string.search(bRegex) != -1) 
      modules[0] = "B"; 
     else 
      modules[0] = "X"; 
     if (string.search(lRegex) != -1) 
      modules[1] = "L"; 
     else 
      modules[1] = "X"; 
     if (string.search(aRegex) != -1) 
      modules[2] = "A"; 
     else 
      modules[2] = "X"; 

     return modules; 
    } 

}); 

我使用FindModuleRule功能通过所有的值字符串进行排序,并挑选出仅出现在特定的值,例如“A”,“L”,或者如果没有“B”键的字符被找到然后我分配给'X',这是在任何值字符串中找不到的。然后,我使用该字符选择所有包含该字符的值的复选框,并将其打开或关闭,然后将被点击的复选框切换到适当的状态。

0
$('input [type="checkbox"]').click(function() { 
    if($(this).is(':checked')) { 
     //do stuff 
    } 
}) 
+0

在确定复选框是否被选中后,我将如何遍历页面上其余复选框? –

+0

'$(':checkbox')。each(function(){ // $(this)... }' – Thomas

1

首先,你不能有input[type="checkbox"]之间的空间,因为寻找内的其他投入要素复选框(这是无效)..

所以像

$('input[type="checkbox"]').click(function() { 
    $('otherselector').prop('disabled', this.checked); 
}); 
1

没有看到究竟是你如何设置标记,很难告诉你你需要做什么。然而,她是一个jsfiddle来说明:

HTML

<input type="checkbox" id="ckall" /> Check 'em all! 
<ul> 
    <li><input type="checkbox" /> Item 1</li> 
    <li><input type="checkbox" /> Item 2</li> 
    <li><input type="checkbox" /> Item 3</li> 
    <li><input type="checkbox" /> Item 4</li> 
    <li><input type="checkbox" /> Item 5</li> 
</ul>​ 

JS

$("input[type='checkbox']").click(function() { 
    $("ul :checkbox").attr("checked", $(this).is(":checked"));    
});​ 

根据您的标记,并且什么究竟你正在寻找做决定你的jQuery选择器。不过,我假设你正在创建一个“全部检查”类型的复选框。如果是这样,你会在小提琴中看到检查所有复选框事件,然后选择某个容器元素中的所有复选框。如果你不这样做,那么你也将结束可能改变你的状态检查全部复选框。

+0

我不想勾选所有的复选框,我有某些排除的复选框所以我需要能够禁用并启用基于此的复选框 –

+0

@Rick Eyre - 那么我可以建议的唯一的事情是,您可以使用类名来对它们进行分组,以便您可以在另一个框是取消/检查,否则你被困在循环的_lots_,这可以真正影响性能。 –