Side navigation
#9504 closed bug (fixed)
Opened June 03, 2011 07:39AM UTC
Closed July 09, 2011 06:56PM UTC
Last modified December 07, 2011 10:56PM UTC
HTML5 boolean attributes return undefined with attr in browsers that do not support them
Reported by: | jc@redantenna.com | Owned by: | timmywil |
---|---|---|---|
Priority: | low | Milestone: | 1.next |
Component: | attributes | Version: | 1.6.1 |
Keywords: | needsreview | Cc: | |
Blocked by: | Blocking: |
Description
1. jQuery version 1.6.1
2. IE9, version 9.0.8112.16421 Czech
3. Windows 7 32 bit
4. Open attached link or just try to make an input with a required attribute and read this attribute using .attr(). It will work in any browser except for IE9. And yes, it works in previous versions of IE.
5. It should return an actual value of the required attribute instead of "undefined".
http://stg-minishop.redantenna.com/jquery-ie9-required-bug.php
Attachments (0)
Change History (16)
Changed June 03, 2011 03:40PM UTC by comment:1
component: | unfiled → attributes |
---|---|
keywords: | → needsreview |
priority: | undecided → low |
status: | new → open |
Changed June 03, 2011 03:42PM UTC by comment:2
In other words, the boolHook is doing it's job, but it's not really doing anything in IE9.
Changed June 19, 2011 07:56AM UTC by comment:3
_comment0: | This bug also exists in FF3.6 → 1308470408951489 |
---|
Changed June 19, 2011 08:28AM UTC by comment:4
I really only see two ways this could be patched
a) remove required from the boolHooks since apparently setting .required property isn't going to affect it anyway.
You can do this yourself in your JS with
$.attrHooks.required = {}-- It should monkey patch this bug in the meantime.
b) Update the boolHook on get to only return the property if it is !== undefined, since it seems that FF3.6 / IE9 are returning "undefined" for the property:
http://jsfiddle.net/VrHHM/7/ has some further testing
Changed June 19, 2011 08:34AM UTC by comment:5
Also mentioned in IRC...
.is('[required]')seems to be an alternate way (not subject to this particular bug) to get true/false based on the presence of a "required" attribute...
Changed June 19, 2011 07:22PM UTC by comment:6
Concerning gnarf's option b, I believe it already does that. We only return a value when true and undefined if not true. However, I see an underlying issue here and there are multiple options.
1. We can use the boolean hook as a means of checking for support, which becomes necessary if we are going to check the property values when returning values for these attributes (this is what it already does and we have specific tests for it).
2. We can check for the presence of the attribute without checking property values at all and return the attribute name if present and undefined if not (this will be consistent, but will not reflect the property since the properties are inconsistent across browsers).
3. We can drop support completely for using attr to set html5 boolean attributes such as autofocus, autoplay, controls, and required because these are the properties which are not consistently supported across browsers.
Personally, I am in favor of either 1 or 3. If 1 is the most popular, this bug can be closed. If 3 is the most popular, it's an easy fix. 2 would require the most work with all of the getAttribute AND getAttributeNode quirks in IE for boolean attributes and I don't think it's worth it.
Changed June 21, 2011 02:59AM UTC by comment:7
For boolean attributes, all user cares about is its existence. So will introduce another API like .hasAttr() be an option? It conveys user intention more clearly and can function more efficiently by directly calling hasAttribute().
Changed June 21, 2011 02:10PM UTC by comment:8
@gravof: I don't think that's a good enough reason to add a new function, especially since attr can handle it for everything that is not a boolean attribute. However, that may be a good reason to go with #3, restoring that functionality in attr for boolean attributes.
BTW, hasAttribute would not work in all browsers so we'd need a fallback similar to what attr does already anyway.
Changed June 24, 2011 06:49AM UTC by comment:9
Just found out .is('[required]') doesn't work in IE8 and below. Should I fire another issue or does it relate to this issue?
Test case here: http://jsfiddle.net/VrHHM/11/
Changed June 24, 2011 01:59PM UTC by comment:10
@gravof there are tickets open already concerning that issue. Thanks!
Changed July 04, 2011 11:42PM UTC by comment:11
summary: | .attr('required') on IE9 returns undefined → HTML5 boolean attributes return undefined with attr in browsers that do not support them |
---|
Changed July 04, 2011 11:42PM UTC by comment:12
#9735 is a duplicate of this ticket.
Changed July 04, 2011 11:43PM UTC by comment:13
owner: | → timmywil |
---|---|
status: | open → assigned |
Changed July 09, 2011 06:56PM UTC by comment:14
resolution: | → fixed |
---|---|
status: | assigned → closed |
Check the attribute node value for false for HTML5 booleans when not supported. Fixes #9504.
Changeset: 1886d7443453feab0b73f4a7c4b15fbd9401c4af
Changed August 18, 2011 03:31PM UTC by comment:15
#9990 is a duplicate of this ticket.
Changed December 07, 2011 10:56PM UTC by comment:16
Which version has this fix?
Confirmed, but it's more complicated. The required property does not exist on the element so our hook for boolean attributes returns undefined since the property is undefined. I'm not too worried about this one. There's no way to fix it and have the results be consistent across browsers unless we simply remove required from the boolean regex and drop support for setting that boolean with attr. OR, we can leave it as is since this is also an indicator that IE9 doesn't support required.