1

我在网上做了很多搜索,发现了将$('#checkbox').attr('checked')其视为字符串的示例和其他将其视为布尔值的示例。

就我而言,我发现此语句按预期工作:

$('#AcceptAgreement').attr('checked', false);

但是这个没有:

if ($('#AcceptAgreement').attr('checked') == true)

第二个语句是错误的,因为实际上该值是“已检查”。

那么它是哪一个?它是字符串还是布尔值,如何以可靠的方式读写它?

4

6 回答 6

4

可能您不应该使用属性,只需使用 dom 节点的“已检查”属性来更改状态

$('#AcceptAgreement')[0].checked = false
if ($('#AcceptAgreement')[0].checked)
于 2012-04-27T21:17:16.797 回答
3

这取决于您使用的 jQuery 版本。

checked既是属性又是属性。在旧版本的 jQuery 中,.attr()总是返回属性,而不是属性,它通常是一个布尔值。较新版本的 jquery (1.6+) 有一个称为.prop返回布尔属性值的新方法,而.attr()现在正确返回字符串值。我不确定属性更改时属性是否总是更新。

于 2012-04-27T21:10:24.340 回答
1

它是一个字符串,但 jQuery 允许您使用布尔值设置它,然后相应地更改属性。将其设置为“false”会导致attr('checked')返回undefined.

于 2012-04-27T21:09:03.593 回答
1

有一种找出数据类型的基本方法

console.log(typeof $('#AcceptAgreement').attr('checked'));

但在 jQuery 1.7 之前,它用于返回属性值,现在它返回纯字符串。

另一种选择是.prop('checked')返回布尔值。

于 2012-04-27T21:13:34.683 回答
0

要编写,您必须使用:

$('#AcceptAgreement').attr('checked', 'checked');

如果你想知道它是否被检查可以使用:

if($('#AcceptAgreement').attr('checked'))
于 2012-04-27T21:12:08.060 回答
0

您可以使用:

if ($('#AcceptAgreement').is(':checked'))
{
   //...
}

或缩短:

$('#isAgeSelected').is(':checked') ? /*true*/ : /*false*/ ;
于 2012-04-27T21:12:20.547 回答