if ( !unlock ) {
unlock = Data.uid++;
descriptor[ this.expando ] = { value: unlock };
-
+
// Secure it in a non-enumerable, non-writable property
try {
Object.defineProperties( owner, descriptor );
});
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
} 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;
}
});
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" );
- div.data( "long-param", { a: 2 });
+ div2.attr( "data-long-param", "test" );
+ 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() {