.is(':checked')总是返回true

4

HTML:

<table id="list">
   <tr>
      <td><input type="checkbox" checked="true"></td>
      <td>...</td>
   </tr>
   <tr>
      <td><input type="checkbox" checked="true"></td>
      ...
   </tr>
   ...
</table>

JS:

$('#list tr').each(function(){
   console.log(
        $(this).find('input[type="checkbox"]').is(':checked')
   );    
});

问题:上述日志语句总是返回true。每个tr都包含一些数据,我想使用这些数据执行某个操作。但用户可以取消选择一些实体,在这种情况下不可能执行操作,因为is(':checked')总是返回true,即使条目未被选中/取消选中。
有什么想法如何解决这个问题?

但在你的例子中,它们被检查了。 - j08691
1
你甚至没有监听 change 事件。each !== event - Ram
你的标记语言有错误,checked="true" 是无效的。有效的 checked 值包括 checked、checked="checked" 和 checked=""。 - Musa
3个回答

4

我猜你实际上是在使用这个:

input type="checkbox" checked="false"

如果将 "false"(作为字符串)用于 checked 属性,将导致复选框被选中,因为它会被解析为 true

如果要使复选框未被选中,请不要包含 checked 属性。


4

你的'checked'属性值为true,所以即使有<input type="checkbox" checked />,它也将返回true

我使用你的代码创建了一个演示,并添加了一个函数来检索.is(":checked")作为其属性发生更改。

$("input").change(function() {
    console.log($(this).is(':checked'));
});

并且它展示了变化。你的问题必须出在其他地方。

2

首先,您可以使用以下语句选择所有复选框,如果其中一个被选中,则会返回true。

$(this).find('input[type="checkbox"]').is(':checked')

其次,默认的选中状态应该为checked="checked"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接