优雅地处理复选框
Gracefully handling checkboxes
我目前正在开发一些javascript,用于检查复选框中是否存在复选框。这个javascript代码或多或少写得很糟糕,我们在代码的多个地方多次检查复选框是否被选中。我想问是否有一种优雅的方法可以为只检查一次的复选框选项设置主覆盖,以提高性能并保持代码干燥。基本上现在,对于每一个需要检查的地方,我都会去
if($("#element").attr("checked")){
do something...
} else {
do something else...
}
我有点不懂javascript,所以我想知道这更多是一个最佳实践问题。
一种方法是获取当前页面上选中的所有复选框,然后对其进行迭代。
var checkedBoxes = document.querySelectorAll("input:checked");
for (var i =0; i<checkedBoxes.length; i++)
{
//do something
}
这只适用于FF 3.1+、Safari 3.1+、IE8+和Chrome 4+
另请注意,querySelectoAll返回NodeList(不是数组)。
如果要检查是否选中了特定复选框:
Fiddle:http://jsfiddle.net/TesUq/
if($("#element").is(":checked")){
console.log('#element is checked');
} else {
console.log('#element is not checked');
}
如果要检查选中了哪些复选框:
Fiddle:http://jsfiddle.net/TesUq/1/
$("input:checkbox").each(function () {
if ($(this).is(":checked")) {
console.log($(this).prop('id') + ' is checked');
} else {
console.log($(this).prop('id') + ' is not checked');
}
});
如果您想查看是否选中了ANY复选框:
if ($('input:checkbox:checked').length > 0) {
/* do whatever you need to do */
}
对于特定的复选框处理:
var chkBox = $('input:checkbox');
$.each(chkBox, function(i, v) {
if ($(this).is(':checked')) {
/* do whatever for this specific element using $(this) *'
};
});
您可以自己跟踪状态,以减少执行jQuery选择所花费的时间。。。
使用此HTML
<div>
<label for="box1">Box 1</label>
<input type="checkbox" id="box1" name="BoxOne" />
<span>Checked:</span>
<span id='box1state'>?</span>
</div>
和这个javascript
$('document').ready(function () {
var box1state = $('#box1state');
$('#box1').change(function (e) {
box1state.text(this.checked);
});
box1state.text($('#box1')[0].checked);
});
(看小提琴http://jsfiddle.net/stephen61/uQv5y/1/)
<span>
将始终包含复选框的当前状态。相反,该技术可以用于测试复选框的状态以及.change(...)
函数中的do something...
或do something else...
。每次复选框状态更改时,只有更改时,代码才会被激发以执行您想要的操作。
相关文章:
- 复选框,然后单击事件处理
- 在服务器上创建一个复选框,使用 javascript 处理函数
- Javascript,表单中任何复选框的事件处理程序
- 如何发布单选和复选框选择?表单由php和js处理
- 带有复选框的jQuery更改事件处理程序
- 类事件处理程序未检测是否选中复选框
- 隐藏Zend单选按钮和复选框标签在javascript点击处理程序中
- JavaScript 从表单元素处理复选框创建 URL
- 复选框单击事件处理程序和显示/隐藏功能
- 单击复选框时的 Jquery 事件处理
- 在打开窗口中处理复选框
- 为什么我的 React 复选框在渲染时触发更改处理程序,然后在单击该框时不触发
- 处理 MEAN 应用程序中的复选框
- 复选框/dojox.grid.cells.Bool 的事件处理程序,位于 EnhancedGrid 中的 ItemFil
- PHP / jquery进度条处理输入更改(复选框:选中)
- 在单击Rad Grid中的复选框时调用 ASP.Net HTTP处理程序
- 复选框事件和保持数组-如何在代码中处理
- HTML复选框处理
- 如何使用jQuery处理两个复选框
- internetexplorer6-如何在IE6中使用数千个复选框处理页面上的javascript