2013-03-07 143 views
2

HTML:。是( ':勾选')总是返回true

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

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

+0

但在你的例子中,他们被检查。 – j08691 2013-03-07 19:05:42

+1

你甚至不听“变化”事件。 '每个!==事件'。 – undefined 2013-03-07 19:06:22

+0

您的标记错误checked =“true”无效,检查有效的检查值,检查=“检查”和检查=“”。 – Musa 2013-03-07 19:11:23

回答

3

您'已检查'属性的值为true,所以它将返回true,因为即使有<input type="checkbox" checked />也将被检查。

我用您的代码创建了一个demo,并使用附加函数检索.is(":checked"),因为它的属性已更改。

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

它显示了变化。你的问题必须在其他地方。

2

首先选择了所有与下面的语句复选框,所以如果一个被选中,它将返回true

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

二的检查默认值,应检查=“检查”。

2

我的猜测是你实际使用的是这样的:

input type="checkbox" checked="false" 

这会导致选中的复选框,因为"false"(字符串)计算结果为true

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