Bug Tracker

Opened 9 years ago

Closed 9 years ago

#7837 closed bug (worksforme)

$.data don't behave the same as $.fn.data with data-* attributes

Reported by: Pomeh <pomeh13@…> Owned by: Pomeh <pomeh13@…>
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:

Change History (4)

comment:1 Changed 9 years ago by dmethvin

Owner: set to Pomeh <pomeh13@…>
Status: newpending

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?

comment:2 in reply to:  1 Changed 9 years ago by Pomeh <pomeh13@…>

Status: pendingnew

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 9 years ago by snover

Component: unfileddata
Keywords: needsreview added
Priority: undecidedhigh
Status: newopen

comment:4 Changed 9 years ago by john

Resolution: worksforme
Status: openclosed

Yeah, this is the intended behavior. As a end-user you should be interacting directly with jQuery.fn.data.

Note: See TracTickets for help on using tickets.