diff --git a/src/data.js b/src/data.js index 66fe1134d..906d85f3a 100644 --- a/src/data.js +++ b/src/data.js @@ -30,7 +30,7 @@ Data.prototype = { if ( !unlock ) { unlock = Data.uid++; descriptor[ this.expando ] = { value: unlock }; - + // Secure it in a non-enumerable, non-writable property try { Object.defineProperties( owner, descriptor ); @@ -312,7 +312,8 @@ jQuery.fn.extend({ }); function dataAttr( elem, key, data ) { - var name; + var name, + camelKey = jQuery.camelCase( key ); // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute @@ -333,7 +334,7 @@ function dataAttr( elem, key, data ) { } catch( e ) {} // 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 { data = undefined; } diff --git a/test/unit/data.js b/test/unit/data.js index cd8183fe1..7ab58be3c 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -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() { - expect(1); + expect(2); - var div = jQuery("
").appendTo("#qunit-fixture"); + var div1 = jQuery("
").appendTo("#qunit-fixture"); - div.attr( "data-long-param", "test" ); - div.data( "long-param", { a: 2 }); + div1.attr( "data-long-param", "test" ); + div1.data( "long-param", { a: 2 }); - deepEqual( div.data("long-param"), { a: 2 }, "data with property long-param was found" ); + deepEqual( div1.data("long-param"), { a: 2 }, "data with property long-param was found" ); + + var div2 = jQuery("
").appendTo("#qunit-fixture"); + + div2.attr( "data-long-param", "test" ); + div2.data( "long-param" ); + div2.data( "long-param", { a: 2 }); + + 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() {