Commit 761b96c3 authored by Michał Gołębiowski's avatar Michał Gołębiowski Committed by Rick Waldron

Fixes #13550. .data should not miss attr() set data-* with hyphenated property...

Fixes #13550. .data should not miss attr() set data-* with hyphenated property names. Closes gh-1189
parent 8f721819
...@@ -30,7 +30,7 @@ Data.prototype = { ...@@ -30,7 +30,7 @@ Data.prototype = {
if ( !unlock ) { if ( !unlock ) {
unlock = Data.uid++; unlock = Data.uid++;
descriptor[ this.expando ] = { value: unlock }; descriptor[ this.expando ] = { value: unlock };
// Secure it in a non-enumerable, non-writable property // Secure it in a non-enumerable, non-writable property
try { try {
Object.defineProperties( owner, descriptor ); Object.defineProperties( owner, descriptor );
...@@ -312,7 +312,8 @@ jQuery.fn.extend({ ...@@ -312,7 +312,8 @@ jQuery.fn.extend({
}); });
function dataAttr( elem, key, data ) { function dataAttr( elem, key, data ) {
var name; var name,
camelKey = jQuery.camelCase( key );
// If nothing was found internally, try to fetch any // If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute // data from the HTML5 data-* attribute
...@@ -333,7 +334,7 @@ function dataAttr( elem, key, data ) { ...@@ -333,7 +334,7 @@ function dataAttr( elem, key, data ) {
} catch( e ) {} } catch( e ) {}
// Make sure we set the data so it isn't changed later // Make sure we set the data so it isn't changed later
data_user.set( elem, key, data ); data_user.set( elem, camelKey, data );
} else { } else {
data = undefined; data = undefined;
} }
......
...@@ -515,14 +515,22 @@ test(".data should not miss preset data-* w/ hyphenated property names", functio ...@@ -515,14 +515,22 @@ test(".data should not miss preset data-* w/ hyphenated property names", functio
}); });
test(".data should not miss attr() set data-* with hyphenated property names", function() { test(".data should not miss attr() set data-* with hyphenated property names", function() {
expect(1); expect(2);
var div1 = jQuery("<div/>").appendTo("#qunit-fixture");
div1.attr( "data-long-param", "test" );
div1.data( "long-param", { a: 2 });
deepEqual( div1.data("long-param"), { a: 2 }, "data with property long-param was found" );
var div = jQuery("<div/>").appendTo("#qunit-fixture"); var div2 = jQuery("<div/>").appendTo("#qunit-fixture");
div.attr( "data-long-param", "test" ); div2.attr( "data-long-param", "test" );
div.data( "long-param", { a: 2 }); div2.data( "long-param" );
div2.data( "long-param", { a: 2 });
deepEqual( div.data("long-param"), { a: 2 }, "data with property long-param was found" ); deepEqual( div2.data("long-param"), { a: 2 }, "data with property long-param was found" );
}); });
test("jQuery.data supports interoperable hyphenated/camelCase get/set of properties with arbitrary non-null|NaN|undefined values", function() { test("jQuery.data supports interoperable hyphenated/camelCase get/set of properties with arbitrary non-null|NaN|undefined values", function() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment