Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么数据类型是$(';#checkbox';).attr(';checked';)_Javascript_Jquery_Html_Checkbox - Fatal编程技术网

Javascript 什么数据类型是$(';#checkbox';).attr(';checked';)

Javascript 什么数据类型是$(';#checkbox';).attr(';checked';),javascript,jquery,html,checkbox,Javascript,Jquery,Html,Checkbox,我在网上做了很多搜索,找到了将$('#checkbox').attr('checked')视为字符串的示例,以及其他将其视为布尔值的示例 在我的案例中,我发现这句话如预期的那样有效: $('#AcceptAgreement').attr('checked', false); 但这一条没有: if ($('#AcceptAgreement').attr('checked') == true) 第二条语句为false,因为实际上该值是“checked” 那是哪一个呢?它是字符串还是布尔值,如何以

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

在我的案例中,我发现这句话如预期的那样有效:

$('#AcceptAgreement').attr('checked', false);
但这一条没有:

if ($('#AcceptAgreement').attr('checked') == true)
第二条语句为false,因为实际上该值是“checked”


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

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

这取决于您使用的jQuery版本


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

这取决于您使用的jQuery版本


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

要写入,必须使用:

$('#AcceptAgreement').attr('checked', 'checked');
如果您想知道是否已检查,可以使用:

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

要写作,您必须使用:

$('#AcceptAgreement').attr('checked', 'checked');
如果您想知道是否已检查,可以使用:

if($('#AcceptAgreement').attr('checked'))
您可以使用:

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

$('#isAgeSelected').is(':checked') ? /*true*/ : /*false*/ ;
您可以使用:

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

$('#isAgeSelected').is(':checked') ? /*true*/ : /*false*/ ;

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

console.log(typeof $('#AcceptAgreement').attr('checked'));
但在jQuery1.7之前,它通常返回属性值,现在它返回纯字符串


另一种替代方法是
.prop('checked')
,它返回布尔值。

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

console.log(typeof $('#AcceptAgreement').attr('checked'));
但在jQuery1.7之前,它通常返回属性值,现在它返回纯字符串


另一种替代方法是
.prop('checked')
,它返回布尔值。

可能不应该使用属性,要更改状态,只需使用dom节点的“checked”属性即可

$('#AcceptAgreement')[0].checked = false
if ($('#AcceptAgreement')[0].checked)

可能您不应该使用属性,要更改状态,只需使用dom节点的“checked”属性即可

$('#AcceptAgreement')[0].checked = false
if ($('#AcceptAgreement')[0].checked)

jQuery的设计者是否认为我只想设置它而不想阅读它?@Jonathan Wood:我看不清他们的想法。我只知道他们做了什么P@JonathanWood在添加
.prop
方法之前,当
.attr
实际返回一个布尔值时,它就产生了。jQuery的设计者是否认为我只想设置它,而不想读取它?@Jonathan Wood:我看不清他们的想法。我只知道他们做了什么P@JonathanWood在添加
.prop
方法之前,当
.attr
实际返回一个布尔值时,它就产生了。
您几乎总是想要prop()方法,而不是attr()方法。prop()只接受布尔值,attr同时接受布尔值,但速度可能较慢,或者可能不是访问元素属性的正确方法。
也许它可以追溯到IE允许选中带有
checked='1'
disabled='true'
的复选框时,但在某些其他浏览器上可能不需要prop()方法,而不是attr()方法。prop()只接受布尔值,attr同时接受布尔值,但速度可能较慢,或者可能不是访问元素属性的正确方式。
也许它可以追溯到IE允许选中带有
checked='1'
disabled='true'
的复选框的时代,但在其他浏览器上可能不是这样,但您的第一个代码片段也可以按照我的方式工作,第二个片段导致了我在问题中描述的问题。但是你的第一个片段也像我那样工作,第二个片段导致了我在问题中描述的问题。听起来不错。看起来我有1.7.1。到目前为止似乎工作可靠。听起来不错。看起来我有1.7.1。到目前为止似乎工作可靠。不可能。这绝对是最明智、最可靠的选择。不可能。这绝对是最明智和可靠的选择。