2011-07-08 75 views
0

我已經選擇多個複選框下面的代碼:jQuery的複選框多選擇

$(document).ready(function() { 

    /* All groups functionality */ 
    $(".allGroups").change(function() { 
     var checked = this.checked; 
     if (checked == true) { 
      $(".group").attr("checked", true); 
      $(".c").attr("checked", true); 
     } 
     if (checked == false) { 
      $(".group").attr("checked", false); 
      $(".c").attr("checked", false); 
     } 
    }) 

    /* Individual Group functionality */ 
    $(".group").change(function() { 
     var checked = this.checked; 
     var number = this.value 
     var set = '.group-' + number; 
     $(set).attr("checked", checked); 
    }) 


}) 

我給「接觸」類cgroup-#。組獲得類group。 選擇所有複選框獲取.allGroups

現在如何實現「全選」複選框取消選中時自己不再檢查所有內容?

得到了的jsfiddle在這裏:http://jsfiddle.net/nqHtu/1/

回答

1

小提琴:http://jsfiddle.net/nqHtu/4/

我也做了一些改進的格式。注意事項:

  1. 你絕對不需要在if語句中比較任何與「true」或「false」相關的東西......結果永遠是你比較的東西! (true == true) - >(true)。
  2. 而不是attr,請使用prophttp://api.jquery.com/prop/
  3. 只需在if/else語句的兩端重複代碼塊並且需要一個布爾值,只需將布爾結果賦值給一個變量並傳遞即可。

下面是更新後的JavaScript:

$(document).ready(function() { 
    /* All groups functionality */ 
    var $allGroups = $(".allGroups").change(function() { 
     var checked = this.checked; 
     $(".group").prop("checked", checked); 
     $(".c").prop("checked", checked); 
    }) 

    /* Individual Group functionality */ 
    $(".group").change(function() { 
     var checked = this.checked; 
     var number = this.value 
     var set = '.group-' + number; 
     $(set).prop("checked", checked); 
     var allchecked = $(".group:checked").length == $(".group").length; 
     $allGroups.prop('checked', allchecked); 
    }); 
}); 
+0

發佈8分鐘後,我幾乎完全相同的代碼,你會得到接受?你是怎麼做到的? :) – AlienWebguy

+0

我花時間在一個漂亮的編號列表中確定他的格式問題,顯着減少了他的行數,改進了代碼清晰度,有一個鏈接沒有說「在此輸入鏈接描述」,併發布了整個代碼塊。只是猜測。 –

+0

很高興你認爲自己如此崇高。保持在它大聲笑。 – AlienWebguy

1

在這裏你去:http://jsfiddle.net/AlienWebguy/nqHtu/2/

簡單地添加這個到。集團更改事件:

if($(".group:checked").length < $(".group").length) 
{ 
     $(".allGroups").prop("checked",false); 
} 

此外,剛擡起頭,「檢查「現在是屬性,而不是屬性,因此您需要使用prop()而不是attr()

1
$(".c").change(function() { 
    if(! this.checked) { 
     $(".allGroups").attr("checked", false); 
    } 
}); 
1

「全選」複選框取消選中本身 時,不是一切都不再檢查

這是假設我們正在考慮聯繫人組複選框也未被選中

$(":checkbox").change(function() { 
    if ($(":checked").length < $(":checkbox").length) { 
     $(".allGroups").prop("checked", false); 
    } 
});