Opened 12 years ago
Closed 12 years ago
#7837 closed bug (worksforme)
$.data don't behave the same as $.fn.data with data-* attributes
Reported by: | Owned by: | ||
---|---|---|---|
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)
Change History (4)
comment:1 follow-up: 2 Changed 12 years ago by
Owner: | set to Pomeh <[email protected]…> |
---|---|
Status: | new → pending |
comment:2 Changed 12 years ago by
Status: | pending → new |
---|
Replying to 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.
comment:3 Changed 12 years ago by
Component: | unfiled → data |
---|---|
Keywords: | needsreview added |
Priority: | undecided → high |
Status: | new → open |
comment:4 Changed 12 years ago by
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?