I just read the jQuery 1.6 release announcement and I must admit I’m a bit confused about the new
.prop() method and the breaking change to the older
.attr() method. In jQuery 1.6 a distinction is made between DOM attributes and DOM properties. Attributes are things like
title and represent the state of the DOM as retrieved from the document. Properties are things like
disabled and represent dynamic state of the document.
For example, suppose an input element:
<input id="myInput" type="checkbox" checked="checked" />.
If you called
$('#myInput').attr('checked') in jQuery 1.5 you got back the value
true. In jQuery 1.6 it would be
"checked" (the actual value of the attribute). If you call
$('#myInput').prop('checked') you get back
true. So far so good although a lot of people will probably be annoyed by the breaking change to the
.attr() method because there are thousands of lines of code that check the value of a checkbox by using
However, besides breaking
.attr(), the announcement of this change is very confusing. If you want to set the
checked attribute of a checkbox, I would expect you should use:
$('myInput').prop('checked', true). But the announcement has the following line:
In jQuery 1.6 Boolean attributes (such as selected, checked, etc.) can now be toggled by passing in
.attr() to either add or remove them.
This is inconsistent. If you call
.attr('checked') you get back the value
"checked" but you should set the attribute by passing in the value
true. Or can you still call
.attr('checked', 'checked') as you could in jQuery 1.5?