2012-04-09 132 views
0

我目前正在使用這個JavaScript代碼片段來一次選擇如何切換複選框選擇而不是僅選擇?

$(document).ready(function() { 
    var $cbs = $('input:checkbox[name="select[]"]'), 
     $links = $('a[name="check"]'); 

    $links.click(function() { 
     var start = $links.index(this) * 3, 
      end = start + 3; 
     $cbs.slice(start,end).prop("checked",true); 
    }); 
}); 

目前這個代碼只選擇複選框3個複選框,如果有人知道如何使其切換複選框選擇修改它,但是我想知道開啓和關閉?

下面是我當前的代碼示例:「jsfiddle」 - 單擊1-3,4-6鏈接等來檢查複選框。

回答

1

使第二個參數來調用prop("checked", ...)依賴於第一(或其他)複選框在片中的「檢查」狀態:

// ... 
$cbs.slice(start,end).prop("checked", !$cbs.slice(start).prop("checked")); 

這裏是一個updated jsFiddle

[編輯]或者更新單獨切片每個複選框:

// ... 
$cbs.slice(start,end).each(function() { 
    var $this = $(this); 
    $this.prop("checked", !$this.prop("checked")); 
}); 

http://jsfiddle.net/ShZNF/3/

+0

更好的解決方案,我不知道.removeProp是如此具有破壞性。 – Rick 2012-04-09 19:29:05

0
$cbs.slice(start,end).each(function() { 
     if ($(this).is(":checked")) { 
      $(this).removeProp("checked"); 
     } else { 
      $(this).prop("checked",true); 
     } 
    }); 

http://jsfiddle.net/ShZNF/1/

編輯:Maeric的解決方案是更好的。我不知道removeProp過這樣的疑難雜症:

注意:不要使用此方法,如 檢查,禁用或選擇移除固有特性。這將完全移除 ,並且一旦移除,不能再次添加到元素。使用 .prop()將這些屬性設置爲false。

+0

我以爲你應該有'checked ='檢查''如果它是真的,沒有,如果不是,不是'checked =「false」''。 – 2012-04-09 19:33:20

+0

據我所知,檢查存在的伎倆。這可能是一個壞習慣。 http://www.w3schools.com/html5/att_input_checked.asp列出「已檢查」有效 - 找不到比w3Schools更好的鏈接=/ – Rick 2012-04-09 19:46:00

+0

[「當開關設置了檢查屬性時,開關處於打開狀態。「](http://www.w3.org/TR/html401/interact/forms.html#checkbox)雖然將它設置爲」checked「似乎沒有任何作用,但在我看來,它設置爲false只要設置好了,仍然應該對它進行檢查。 – 2012-04-09 19:49:52