Side navigation
#7128 closed bug (fixed)
Opened October 07, 2010 09:05PM UTC
Closed September 19, 2011 07:43PM UTC
attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties
Reported by: | adipose | Owned by: | timmywil |
---|---|---|---|
Priority: | blocker | Milestone: | 1.7 |
Component: | selector | Version: | 1.4.3 |
Keywords: | equal selector | Cc: | |
Blocked by: | Blocking: |
Description
If I set an input value with javascript, the jquery selector does not select it unless I use an incorrectly formatted selector.
This occurs in Chrome 7.0.517.24, Firefox 3.6.10, Firefox 4.0b6, Opera 10.62 and Safari 4.0 (Win32).
IE8, however, does work properly.
Correct selector:
$("[value=a]") does not work.
Incorrect selector:
$("&[value=a]") does work.
$("@[value=a]") does work.
etc.
See the attached example. It works at first, but after the javascript changes the value, it gets wrong results (except in IE8).
Attachments (2)
Change History (32)
Changed October 07, 2010 09:13PM UTC by comment:1
Changed October 07, 2010 11:00PM UTC by comment:2
priority: | high → low |
---|---|
summary: | Jquery selector broken on values set with javascript? → value attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties |
The value
attribute in HTML actually corresponds to the defaultValue
DOM property.
Presumably, the reason the “incorrect” selectors work is because the browser’s native querySelectorAll
function fails (due to their invalidity) and jQuery falls back to using Sizzle’s slow path.
The real bug here sounds like the fact that Sizzle inspects DOM 2 HTML properties instead only using getAttribute
, and perhaps also that IE8 is doing something else it shouldn’t be.
Changed October 08, 2010 04:50PM UTC by comment:3
"The value attribute in HTML actually corresponds to the defaultValue DOM property."
Is this to say, a jquery selector that inspects value
will only ever look at the defaultValue
DOM property?
When using .filter()
, one can select based on value
and not just defaultValue
. Is this also a bug?
What is the proper way to select by value
if value
has been changed?
Changed October 08, 2010 07:44PM UTC by comment:4
The jQuery attribute selector [value="foo"]
should always inspect the HTML attribute value
(which corresponds to the DOM property defaultValue
), not the DOM property value
which corresponds to the user- or script-modified state of the control.
To select by the current value, you would do something like:
$('input:text').filter(function () { return this.value === "foo"; })
Changed October 08, 2010 07:50PM UTC by comment:5
Thank you, I did not realize this, before.
However, I would like to point out that
$('input').filter("[value=foo]")
Works. Is this supposed to work, or will it break once the other bug is corrected?
Changed October 14, 2010 05:43AM UTC by comment:6
status: | new → open |
---|
Changed October 15, 2010 04:11AM UTC by comment:8
blocking: | → 6954 |
---|
Changed October 15, 2010 04:21AM UTC by comment:10
blocking: | 6954 |
---|
Changed October 15, 2010 04:21AM UTC by comment:11
#6954 is a duplicate of this ticket.
Changed October 15, 2010 04:25AM UTC by comment:12
#6939 is a duplicate of this ticket.
Changed October 15, 2010 04:26AM UTC by comment:13
#5810 is a duplicate of this ticket.
Changed October 15, 2010 10:25PM UTC by comment:14
#3399 is a duplicate of this ticket.
Changed October 15, 2010 10:26PM UTC by comment:15
milestone: | 1.4.3 → 1.next |
---|---|
priority: | low → blocker |
version: | 1.4.2 → 1.4.3 |
Many more duplicates are listed in #3399.
Changed October 15, 2010 10:26PM UTC by comment:16
summary: | value attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties → attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties |
---|
Changed October 17, 2010 09:27PM UTC by comment:17
milestone: | 1.4.4 → 1.5 |
---|
Retargeting for 1.5.
Changed October 27, 2010 05:24AM UTC by comment:18
#6470 is a duplicate of this ticket.
Changed November 12, 2010 10:29PM UTC by comment:19
blocking: | → 7485 |
---|
(In #7485) This is something on the roadmap for 1.5. .attr
will be rewritten along with Sizzle to stop matching on the DOM properties, so this will all be happily consistent again.
Changed January 17, 2011 04:50PM UTC by comment:20
milestone: | 1.5 → 1.6 |
---|
This is getting bumped to 1.6 when the $.attr rewrite happens.
Changed April 15, 2011 04:06AM UTC by comment:21
blocking: | 7485 |
---|
Changed April 15, 2011 04:12AM UTC by comment:22
#5930 is a duplicate of this ticket.
Changed April 17, 2011 08:37PM UTC by comment:23
milestone: | 1.6 → 1.next |
---|
Changed April 25, 2011 04:43AM UTC by comment:24
#8960 is a duplicate of this ticket.
Changed May 03, 2011 01:48PM UTC by comment:25
#9062 is a duplicate of this ticket.
Changed May 03, 2011 01:55PM UTC by comment:26
#8740 is a duplicate of this ticket.
Changed May 12, 2011 07:43PM UTC by comment:27
blocking: | → 9261 |
---|
Changed May 17, 2011 04:20PM UTC by comment:28
milestone: | 1.next → 1.7 |
---|
Changed June 20, 2011 02:04PM UTC by comment:29
#9623 is a duplicate of this ticket.
Changed July 25, 2011 04:02PM UTC by comment:30
owner: | → timmywil |
---|---|
status: | open → assigned |
Changed September 11, 2011 10:23PM UTC by comment:31
#9171 is a duplicate of this ticket.
Added file as html