2012-04-09 95 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