2012年7月30日 星期一

用jquery控制checkbox全選或不全選

今天剛好遇到一個需要用jquery去做checbox出可以全選或是取消全選的功能,這樣的功能常出現在信箱管理,或者是購物清單等等。此做法雖然有很多多餘的句子,但至少還蠻好理解的..(對我來說xd )
我的作法:
 
$(function(){

$("input[type=checkbox]:eq(0)").click(function() {

   if($("input[type=checkbox]:eq(0)").attr("checked"))
   {
     $("input[type=checkbox]:gt(0)").each(function() {
         $(this).attr("checked", true);
     });
   }
   else
   {
     $("input[type=checkbox]:gt(0)").each(function() {
         $(this).attr("checked", false);
     });           
   }
});
}) 




(有中文註解的)
 
$("input[type=checkbox]:eq(0)").click(function() {
//當第一個checkbox被click(按下)之後執行以下function
   if($("input[type=checkbox]:eq(0)").attr("checked"))
   //如果第一個checkbox已經有checked的屬性
   {
     $("input[type=checkbox]:gt(0)").each(function() {
         $(this).attr("checked", true);
   //那麼第0個(也就是畫面上的第一個checkbox)之後(gt(0))所有的(each)每個checkbox都讓他的屬性變成checked
     });
   }
   else //不果第一個沒有checked屬性
   {
     $("input[type=checkbox]:gt(0)").each(function() {
         $(this).attr("checked", false);
   //那麼第0個(也就是畫面上的第一個checkbox)之後(gt(0))所有的(each)每個checkbox都讓他的屬性都是沒有checked
     });           
   }
});
}) 




但用eq() 或者是gt()等方式去做,可能會遇到的問題就是...
或許你的畫面不只一個form
也或許一個頁面有好幾個清單的控制
這時候使用$("input[type=checkbox]:eq(0)去找到第一個checkbox可能會有問題
因為若一個頁面有兩個form 那麼它只會選到第一個form的checkbox
所以我的做法就是讓他對到一個id
在 $("input[type=checkbox]:eq(0) 的input前面加上其可以對應到的id
如:


 $(function(){
//如這個click function我讓它對到只作用在id=todo_list的checkbox
$("#todo_list input[type=checkbox]:eq(0)").click(function() {
   if($("#todo_list input[type=checkbox]:eq(0)").attr("checked"))
   {
     $("#todo_list input[type=checkbox]:gt(0)").each(function() {
         $(this).attr("checked", true);
     });
   }
   else 
   {
     $("#todo_list input[type=checkbox]:gt(0)").each(function() {
         $(this).attr("checked", false);
     });           
   }
});
}) 

練習原始檔rar:
https://docs.google.com/open?id=0Bzn3SuMe9TQGTHZhb1N4OFpnTFk

參考資料:
[jQuery]判斷 checkbox 是否選取,實現全選跟全部取消
魚乾的筆記本-query radiobox取值,checkbox取值,radio選中,checkbox選中,select選中,及其相關
資源:
若不清楚:gt( )  :eq( ) 等等如何使用:jQuery神奇的選擇器(Selector)



沒有留言:

張貼留言

若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...