3

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,即使条目被取消选择/取消选中。

任何想法如何解决这一问题?

4

3 回答 3

4

Your 'checked' attribute has true as its value, so it will return true as even having <input type="checkbox" checked /> will also going be checked.

I created a demo with your code, with additional function to retrieve .is(":checked") as it's property changed.

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

And It shows the change. Your problem must be somewhere else.

于 2013-03-07T19:13:46.443 回答
3

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

input type="checkbox" checked="false"

这会导致选中复选框,因为"false"(作为字符串)评估为true.

如果您希望取消选中复选框,请不要包含选中的属性。

于 2013-03-07T19:05:56.693 回答
2

首先,您使用以下语句选择所有复选框,因此如果选中一个,它将返回 true

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

其次,checked 的默认值应该是checked="checked"。

于 2013-03-07T19:05:37.097 回答