jQuery复选框选中/取消选中
jQuery复选框选中/取消选中
这个问题已经有答案了:
如何合适地选中或取消选中一个复选框,这个复选框位于触发我的函数的元素内部?
这是我的代码:
TEXT |
$("#news_list tr").click(function() { var ele = $(this).find('input'); if(ele.is(':checked')){ ele.removeAttr('checked'); $(this).removeClass('admin_checked'); }else{ ele.attr('checked', 'checked'); $(this).addClass('admin_checked'); } });
问题在于我只能够选中和取消选中一次,选中和取消选中有时仍然可以添加/删除类,但是再也不能检查一个框(即使我点击复选框而不是表格行)。
我尝试使用.bind(\'click\')触发器,但结果相同。
有什么解决方法吗?
admin 更改状态以发布 2023年5月21日
使用 prop()
代替 attr()
设置 checked
的值。在 find 方法中使用 :checkbox
替代 input
,并且要更加具体。
$("#news_list tr").click(function() { var ele = $(this).find('input'); if(ele.is(':checked')){ ele.prop('checked', false); $(this).removeClass('admin_checked'); }else{ ele.prop('checked', true); $(this).addClass('admin_checked'); } });
使用 prop 替代 attr 设置类似 checked 的属性
自 jQuery 1.6 版本以来,
.attr()
方法对于没有设置的属性返回 undefined。要检索和更改表单元素的选中、选定或禁用状态等 DOM 属性,请使用.prop()
方法
使用.prop()
替代,如果我们沿用你的代码,然后像这样比较:
看看这个例子jsbin:
$("#news_list tr").click(function () { var ele = $(this).find(':checkbox'); if ($(':checked').length) { ele.prop('checked', false); $(this).removeClass('admin_checked'); } else { ele.prop('checked', true); $(this).addClass('admin_checked'); } });
更改:
- 将
input
改为:checkbox
。 - 比较
选中的复选框
的长度
。