Rails 2.3.5,到目前为止只在本项目中使用Prototype。
我有一个带有复选框和单选按钮的表单。我一直在尝试几个脚本试图找到一种方法来为复选框提供“全选”/“选择无”功能,其中单选按钮不受影响。即使是专门包含复选框ID的脚本,仍会导致单选按钮切换。
与此问题的最佳答案(基于原型)类似: Select all checkboxes
即使该函数采用复选框的id,它也会影响表单中的单选按钮(最后一个单选按钮最终会被选中)。
我试过的几个脚本都是按复选框的名称,但在我的情况下,它们的名称是 name =“selected_contacts []”表示数组,我无法想象如何让Javascript加入函数中带括号的名称。
到目前为止,我还没有任何运气。是否可以切换复选框,而不影响同一表格中的单选按钮?谢谢!
答案 0 :(得分:4)
使用jQuery你可以这样做......
$("[type='checkbox']","#containerId").each(function(){ this.checked = true });
它总是对我有用。
答案 1 :(得分:2)
虽然@Ice83's answer可行,但使用其他形式的选择器会更简洁一些:
$('form').find('input:selector').each(
function() {
$(this).attr('checked',true);
});
这是因为,无论如何,内部(当然是jQuery 1.4.4)使用选择器的上下文会导致jQuery到call find()
internally。显然,如果您没有使用经典的form
元素,请更改$('form')
以表示您包含复选框的元素。
而input:checkbox
selector只是更简洁一点。
值得注意的是,这些都是最佳,微 - 最优化。
<小时/> 已编辑,参考@Po'Lazarus'评论:
each()
方法确实是多余的。以下内容同样适用(但我没有基准测试它是否会更快):
$('form').find('input:checkbox').attr('checked',true);
它可能更快,我只是没有费心去验证它。
已编辑(再次)现在我已正确阅读了该问题:
以下内容允许您选择/取消选择所有选项:
$('#selectAll').change(
function(){
if ($(this).is(':checked')) {
$('#options').find('input:checkbox').attr('checked',true);
}
else {
$('#options').find('input:checkbox').removeAttr('checked');
}
});
答案 2 :(得分:0)
这是一种方法,它将切换控件的整体状态存储为该控件本身的数据:
$('#your_toggle_control').click( function(e){
e.preventDefault();
// what is the overall toggle state?
var thisState = $(this).data('boxes-checked');
if( thisState == undefined ){
$(this).data('boxes-checked',true); // first time, set initial state on
}
$('#yourform').find(':checkbox').attr('checked', thisState); // check/uncheck
$(this).data('boxes-checked', !thisState); // toggle state of the control
});