【发布时间】:2011-03-08 18:59:21
【问题描述】:
在页面加载时,如何使用 jQuery 自动选择特定 div 中的所有复选框?
【问题讨论】:
标签: javascript jquery checkbox
在页面加载时,如何使用 jQuery 自动选择特定 div 中的所有复选框?
【问题讨论】:
标签: javascript jquery checkbox
$(function(){
$('#thediv input:checkbox').attr('checked', 'checked');
});
【讨论】:
人们似乎真的对如何在 jQuery 中做到这一点感到困惑。没有它,检查复选框会更容易和更有效。下面使用 jQuery 选择和迭代节点列表的优势以及复选框元素的不可能更简单的 DOM checked 属性:
$("#myDiv input:checkbox").each(function() {
this.checked = true;
});
在这种情况下完全删除 jQuery 并不难:
var div = document.getElementById("myDiv");
var inputs = div.getElementsByTagName("input");
for (var i = 0, len = inputs.length; i < len; ++i) {
if (inputs[i].type == "checkbox") {
inputs[i].checked = true;
}
}
更新
自从 jQuery 1.6 和 prop() 发布以来,在 jQuery 中有一种理智的方法可以做到这一点:
$("#myDiv input:checkbox").prop("checked", true);
【讨论】:
redquare 所具有的功能将起作用,但总体而言,将true/false 与这些一起使用是一个更好的主意,因为它们就是这样标准化的,这里有一些示例说明为什么这是一个方便的习惯.例如:
$('#myDiv :checkbox').attr('checked', 'checked');
alert($('#myDiv :checkbox').attr('checked')); //this alerts true, not "checked"
相反,养成传递布尔值的习惯,它的用途要广泛得多,例如:
$(function() {
$('#myDiv :checkbox').attr('checked', true);
});
这为更简洁的代码提供了更大的灵活性,例如,假设我们在顶部有一个“全部选中”复选框,它看起来如何?
$('#checkAll').change(function() {
if(this.checked) {
$('#subTable :checkbox').attr('checked', 'checked');
} else {
$('#subTable :checkbox').removeAttr('checked', 'checked');
}
});
现在我们不得不引入一个新函数来完成这项工作,.removeAttr()。公平地说,this is even how the jQuery documentation does it in the example。但是,如果您利用 jQuery 在内部执行的规范化,您可以大大减少它,如下所示:
$('#checkAll').change(function() {
$('#subTable :checkbox').attr('checked', this.checked);
});
这只是您在编写代码时要记住的事情,同样的规则适用于.attr('disabled')。还有其他领域也发生了正常化...可能事件是其中最广泛的,如果你好奇you can see that here,它已经为你完成了,使用它:)
【讨论】:
checked 属性是迄今为止最简单、最自然的使用方式。 disabled 也是如此。
.each()。你可以在 collection 上做.checked = true; :)
each() 和checked 属性:由于不幸命名为attr() 函数(通常设置属性,而不是属性),许多开发人员现在对一些极其简单的事情存在不必要的混淆) 以及人们现在推荐的多种不确定和曲折的方式来设置一个简单的布尔标志,该标志已经存在并愉快地工作了 15 年。
elem['checked'] = true; 在上面的方法中。是的,有一些开销,归结为一个偏好问题,我想......在任何一种情况下,这都是一个非常小的时间/CPU成本,我个人会在这些情况下采取更简洁的方法。如果由于某种原因我有足够的复选框来处理它......并且我认为此时存在表单问题,那么我会选择.each() 方法:)
attr() 与其说是与性能有关,不如说是使用适当的工具来完成这项工作。 jQuery 几乎单枪匹马负责的属性/属性混淆是不必要且烦人的。它延续了 DOM 很难,因此我们都应该使用 jQuery 的神话,而事实是,在这种情况下,jQuery 本身使一项简单的任务变得更加困难。
这是在 Firefox v.17.01 中的工作。尚未在其他浏览器上进行测试。
// 加载时选择并检查复选框
$('#enable, #enable1, #enable2, #enable3').attr('checked', 'checked');
看例子:
【讨论】: