9

我想不通这个。根据W3 Schools选中的属性设置或返回复选框的选中状态。

那么为什么不起作用$('input').checked ? $('div').slideDown() : $('div').slideUp();呢?

但是,使用 prop 确实有效。

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp();

这是针对基于数据库值选中的复选框。

4

5 回答 5

12

checked是一个 DOM 元素属性,所以在 DOM 元素而不是 jQuery 对象上使用它。

$('input')[0].checked

如果您有一个 jQuery 对象,请使用prop而不是,attr因为您正在检查一个属性。仅供参考:

$("<input type='checkbox' checked='checked'>").attr("checked") // "checked"
$("<input type='checkbox' checked='foo'>").attr("checked") // "checked"
$("<input type='checkbox' checked>").attr("checked") // "checked"
$("<input type='checkbox'>").attr("checked") // undefined

[0].getAttribute("checked")将返回实际值。

prop将返回truefalse基于属性是否存在

于 2013-02-26T04:28:16.913 回答
4

checked是 DOM 对象的属性,而不是 jQuery 对象的属性。要使其工作,您必须获取 DOM 对象:

$('input')[0].checked;

你也可以这样做.is(':checked')

于 2013-02-26T04:27:52.363 回答
4

在这种情况下,您需要prop()而不是attr(),将代码中的调用替换为attr()withprop()通常会起作用。

来自 http://blog.jquery.com/2011/05/10/jquery-1-6-1-rc-1-released/

属性和属性之间的区别在特定情况下可能很重要。在 jQuery 1.6 之前,该.attr()方法有时会在检索某些属性时考虑属性值,这可能会导致行为不一致。从 jQuery 1.6 开始,该.prop()方法提供了一种在检索属性的同时显式检索属性值的方法.attr()

elem.checked ==== true (Boolean)会随着复选框状态而改变

$(elem).prop("checked")====true (Boolean)会随着复选框状态而改变

elem.getAttribute("checked")====="checked" (String)复选框的初始状态;不变

$(elem).attr("checked") (1.6)====="checked" (String)复选框的初始状态;不变

$(elem).attr("checked") (1.6.1+)========"checked" (String)会随着复选框的状态而改变

$(elem).attr("checked") (pre-1.6)=======true (Boolean)更改为复选框状态

此外,此 url 将帮助您更多地了解您的查询.prop() 与 .attr()

http://jsperf.com/is-checked-vs-attr-checked-checked/7/is-checked-vs-attr-checked-checked/7上的区别

还要了解The elements atttribute and properties参考http://christierney.com/2011/05/06/understanding-jquery-1-6s-dom-attribute-and-properties/ http://jsperf.com/is-checked-vs-attr-已检查/7

于 2013-02-26T05:04:30.423 回答
0

$('input') 返回一个 JQuery 对象,它没有检查属性。您可以使用 $('input')[0].checked。

于 2013-02-26T04:29:14.850 回答
0

$('input').attr('checked')已过时,应该使用$('input').prop('checked')
此外,$('input').checked不会像$('input')jquery 对象那样工作,并且checked是属性,所以这就是 jquery 想出$('input').prop('checked')访问属性的原因。

但是,要将 jQuery 对象转换为 DOM 对象,您需要将
$('input')[0].checked其变为 DOM 对象,然后您可以直接使用.

但是使用 jquery 来访问该属性应该使用这个:

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp();

希望这可以帮助!!

于 2013-02-26T04:31:24.157 回答