2011-05-29 33 views
3

我在網上看到的大多數例子都有一個片段,他們使用2個複選框,其中一個僅用於一個複選框(全部),另一個用於複選框列表。在myy的情況下,我只有一個checkboxlist綁定到數據源,例如我的數據源列表選項是(全部,蘋果,橙色,紅色,藍色),我得到了大部分的工作,除非一切都未選中,我檢查最後一個項目,例如藍色它會檢查ALL選項。所以不能正常工作。 id是「所有」項目列表中的檢查/ uncehck checkboxlist與jquery

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
$(document).ready(function() { 
    var id = "#<%=cbOptions.ClientID %>_0"; 
    var checkboxlistid = "#<%= cbOptions.ClientID %>"; 
    $(id).click(function() { 
     $("#<%= cbOptions.ClientID %> input:checkbox").attr('checked', this.checked); 
    }); 
    $(checkboxlistid + " input:checkbox").click(function() { 
     if ($(checkboxlistid).attr('value') != 0) { 
      if ($(id).attr('checked') == true && this.checked == false) { 
       $(id).attr('checked', false); 
      } 
      else { 
       if ($(id).attr('checked') == true && this.checked == true) 
        CheckSelectAll(); 
      } 

     } 
    }); 
    function CheckSelectAll() { 
     var flag = true; 
     $(checkboxlistid + " input:checkbox").each(function() { 
      if ($(checkboxlistid).attr('value') != 0) { 
       if (this.checked == false) { 
        flag = false; 
       } 
       else { 
        if ($(id).attr('checked') == true && this.checked == false) { 
         flag = false; 
        } 
        else { 
         flag = true; 
        } 
       } 
      } 
     }); 

     $(id).attr('checked', flag); 
    } 
     });  
     </script> 
       <asp:CheckBoxList runat="server" ID="cbOptions" > 
       </asp:CheckBoxList> 
     </asp:Content> 
+0

提供有關其他腳本一些更多的信息和標記你。我創建了一個asp.net v2.0網站並複製了所有的腳本和標記,並手動添加了listItems到CheckBoxList,藍色只檢查藍色,只檢查所有檢查 – XGreen 2011-05-29 15:31:36

+0

您可以提供純html/js代碼嗎? – Niklas 2011-05-29 15:33:34

+0

在你的html中必須有'id'衝突;並谷歌這個''選中/取消選中所有通過jQuery複選框「'你會得到很多結果。 ALL D BEST – diEcho 2011-05-29 15:45:15

回答

2
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var id = "#<%=cbOptions.ClientID %>_0"; 
      var checkboxlistid = "#<%= cbOptions.ClientID %>"; 
      $(id).click(function() { 
       $("#<%= cbOptions.ClientID %> input:checkbox").attr('checked', this.checked); 
      }); 
      $(checkboxlistid + " input:checkbox").click(function() { 
      if ($(id).attr('checked') == true && this.checked == false) { 
       $(id).attr('checked', false); 
      } 
      else 
       CheckSelectAll(); 
      }); 
      function CheckSelectAll() { 
       $(checkboxlistid + " input:checkbox").each(function() { 
        var checkedcount = $(checkboxlistid + " input[type=checkbox]:checked").length; 
       var checkcondition = $(checkboxlistid + " input[type=checkbox]:").length - 1 
       if (checkedcount >= checkcondition) 
        $(id).attr('checked', true); 
       else 
        $(id).attr('checked', false); 
       }); 
      } 
     });  
     </script> 
       <asp:CheckBoxList runat="server" ID="cbOptions" > 
       </asp:CheckBoxList> 
     </asp:Content> 
0

的ID試試這個代碼爲您的設置檢查,而不是分別使用true和false使用檢查和「」屬性..更多了,你不能有相同的ID所有的複選框.id的都是獨一無二的..如果你對所有複選框使用相同的id,那麼它根本就不起作用。如果這樣做它作爲類名稱,並使用$(.classname)選擇

function CheckSelectAll() { 
      var flag = "checked"; 
      $(checkboxlistid + " input:checkbox").each(function() { 
       if ($(checkboxlistid).attr('value') != 0) { 
        if (this.checked == false) { 
         flag = ''; 
        } 
        else { 
         if ($(id).attr('checked') == true && this.checked == false) { 
          flag = ''; 
         } 
         else { 
          flag = "checked"; 
         } 
        } 
       } 
      }); 

      $(id).attr('checked', flag); 
     } 
      }); 
+0

嗨感謝您的回覆我嘗試了您的功能,但它不工作,我能夠使用計數多少被檢查,我會發布compelete答案。 – user282807 2011-06-02 03:27:22