为什么当我单击“全选”复选框时计数错误
why counting wrong when i click select all checkbox
我遇到了一个问题。我有一些复选框。我想一次选择它们,但计数结果是错误的。当我使用火狐,歌剧那么好,但是当我使用crome,safari,IE时,它给了我一个错误的结果。为什么?请帮助我。
http://jsfiddle.net/Taslimkhan/kdEmH/2/
我在这里设置了一些代码:
// add multiple select / deselect functionality
$("#selectall").click(function () {
$('.case').attr('checked', this.checked);
});
// if all checkbox are selected, check the selectall checkbox
// and viceversa
$(".case").click(function(){
if($(".case").length == $(".case:checked").length) {
$("#selectall").attr("checked", "checked");
} else {
$("#selectall").removeAttr("checked");
}
});
});
$(document).ready(function () {
$("input[type=checkbox]").each(function () {
$(this).change(updateCount);
});
updateCount();
function updateCount () {
var count = $("input[type=checkbox]:checked").size();
$("#count").text(count);
$("#status").toggle(count > 0);
};
});
首先,.size()
被弃用。请改用 length
属性。
其次,您可能希望将计数的复选框限制为具有.case
类的复选框:
var count = $("input[type=checkbox].case:checked").length;
第三,你的代码编写方式,你应该在click
事件而不是change
事件上调用updateCount()
,并且你不需要那里的匿名函数:
$("input[type=checkbox]").click(updateCount);
我保存了您的 jsfiddle 的新版本:http://jsfiddle.net/kdEmH/8/
单击是要捕获的正确事件,而不是更改。还有你为什么要迭代绑定。将文档替换为以下内容:
$(document).ready(function () {
$("input").bind('click', function () {
updateCount();
});
updateCount();
function updateCount () {
var count = $( "input:checked" ).length;
$("#count").text(count);
$("#status").toggle(count > 0);
};
});
就像 Angela 说的,你应该监听更改事件,不能保证在复选框的值更改后调用单击。此外,该值可能会因其他原因而更改,例如按 Tab 键进入字段和点击空格。同样重要的是要认识到,当您以编程方式设置复选框的值时,更改事件不会触发,因此在以编程方式设置值时必须调用 updateCount,因此,没有理由将 updateCount 绑定到单击,只需在处理任何复选框的更改事件时调用它。
这是一个完整的片段,就像你所拥有的一样,除了我始终保持计数可见
$(function(){
function updateCount () {
var count = $("input.case[type=checkbox]:checked").length;
$("#count").text(count);
}
updateCount();
// add multiple select / deselect functionality
$("#selectall").change(function() {
$('.case').prop('checked', this.checked);
updateCount();
});
// if all checkbox are selected, check the selectall checkbox
// and viceversa
$(".case").change(function(){
if($(".case").length == $(".case:checked").length) {
$("#selectall").attr("checked", "checked");
} else {
$("#selectall").removeAttr("checked");
}
updateCount();
});
});
相关文章:
- jquery表单验证复选框错误显示
- Javascript错误,根据其他复选框的结果更新复选框/按钮
- Javascript复选框逻辑错误
- 复选框验证错误
- 量角器如果(复选框.isSelected())错误
- 检查所有选中的复选框是否具有值=正确,以及所有未选中的复选框的值=错误
- 未捕获的错误:语法错误,无法识别的表达式:输入:复选框[名称=ninja_forms_field_57[术语]]
- PHP 复选框邮件程序为每个错误
- 类型错误: 无法分配给只读属性“选中”复选框
- jQuery:计数选中的复选框 - 错误的计数
- 显示对话框时的错误复选框
- 我的JavaScript在复选框检查中有一些错误
- $(..).实时不是函数错误和复选框选中错误
- 语法错误,无法识别的表达式:[对象 HTMLDivElement]输入:复选框[名称=]:选中
- 保留Rails表单验证错误的复选框状态
- 即使选中复选框,也会出现错误
- 单击第一个子项后,选中所有复选框错误
- ExtJs复选框错误
- Angular复选框错误
- 复选框“错误”:无法获取属性“'checked';对象为空或未定义”