2012-06-12 245 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_,這可以真正影響性能。 –