Side navigation
#7837 closed bug (worksforme)
Opened December 24, 2010 12:07AM UTC
Closed April 17, 2011 08:34PM UTC
$.data don't behave the same as $.fn.data with data-* attributes
Reported by: | Pomeh <pomeh13@gmail.com> | Owned by: | Pomeh <pomeh13@gmail.com> |
---|---|---|---|
Priority: | high | Milestone: | 1.6 |
Component: | data | Version: | 1.4.4 |
Keywords: | needsreview | Cc: | |
Blocked by: | Blocking: |
Description
The bug is about jQuery.data and jQuery.fn.data.
Tests
I ran tests with jQuery version 1.4.4, on Windows Vista (please don't blame me!) and on following browsers:
- Internet Explorer Beta 9.0.7960 (with all document modes 9, 8 and 7)
- Chrome 8.0.552
- Firefox 3.6.13
I ran the same tests, except for IE 9, on Windows XP.
All tests confirm the unexpected behavior.
I've create a test case here: http://jsfiddle.net/pomeh/bJ6Nh/
Description
If we have a DOM element "myDomElement" which has a "data-state" attribute and its value "my-state-value", a call to jQuery.data(myDomElement, 'state') returns "undefined" instead of "my-state-value".
But a call to jQuery(myDomElement).data('state') returns the right value ("my-state-value").
Also, as shown in the test case, if we first call to jQuery(myDomElement).data('state') and then we try jQuery.data(myDomElement, 'state'), this time the value will be correct.
Correction
I think the reason of the bug is simple:
- first, jQuery.data doesn't get data-* values because the call to internal "dataAttr" method occurs only in the jQuery.fn.data method (see https://github.com/jquery/jquery/blob/master/src/data.js#L158)
- second, why two successive calls to jQuery.fn.data and jQuery.data fixes the issue is because the internal "dataAttr" method store the value with a call to jQuery.data (see https://github.com/jquery/jquery/blob/master/src/data.js#L224)
Attachments (0)
Change History (4)
Changed December 24, 2010 05:08AM UTC by comment:1
owner: | → Pomeh <pomeh13@gmail.com> |
---|---|
status: | new → pending |
Changed December 24, 2010 09:57AM UTC by comment:2
status: | pending → new |
---|
Replying to [comment:1 dmethvin]:
It's intentional that jQuery.data does not pull data- attributes; only the jQuery.fn.data method does that. Was there some documentation you saw that indicated otherwise?
No there wasn't, but I was expected they works the same way, that's ok maybe I'm wrong I'm sorry.
But if they don't and won't works the same way, there's still a problem. Looks at this: http://jsbin.com/ahicu4/edit (sorry about JS Bin but jsFiddle is down right now). The problem is that when you call first $.fn.data *then* $.data on the same element, the $.data return the data-* attributes !
That's because $.fn.data pull those attributes and store them into the internal cache, then $.data read that cache, so the value is retrieved.
So the way you call $.data may alter the value being retrieved.
Changed January 31, 2011 11:34PM UTC by comment:3
component: | unfiled → data |
---|---|
keywords: | → needsreview |
priority: | undecided → high |
status: | new → open |
Changed April 17, 2011 08:34PM UTC by comment:4
resolution: | → worksforme |
---|---|
status: | open → closed |
Yeah, this is the intended behavior. As a end-user you should be interacting directly with jQuery.fn.data.
It's intentional that jQuery.data does not pull data- attributes; only the jQuery.fn.data method does that. Was there some documentation you saw that indicated otherwise?