return;
}
- if ( key === undefined ) {
- this.register( owner );
-
- } else {
+ if ( key !== undefined ) {
// Support array or space separated string of keys
if ( jQuery.isArray( key ) ) {
delete cache[ key[ i ] ];
}
}
+
+ // Remove the expando if there's no more data
+ if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+ delete owner[ this.expando ];
+ }
},
hasData: function( owner ) {
var cache = owner[ this.expando ];
}
}
- // Remove the expando if it's no longer used
+ // Remove data and the expando if it's no longer used
if ( jQuery.isEmptyObject( events ) ) {
- // Normally this should go through the data api
- // but since event.js owns these properties,
- // this exception is made for the sake of optimizing
- // the operation.
- delete elemData.handle;
- delete elemData.events;
+ dataPriv.remove( elem, "handle events" );
}
},
});
testIframeWithCallback( "enumerate data attrs on body (#14894)", "data/dataAttrs.html", function( result ) {
- expect(1);
+ expect( 1 );
+
+ equal( result, "ok", "enumeration of data- attrs on body" );
+});
+
+test( "Check that the expando is removed when there's no more data", function() {
+ expect( 1 );
- equal(result, "ok", "enumeration of data- attrs on body" );
+ var key,
+ div = jQuery( "<div/>" );
+ div.data( "some", "data" );
+ equal( div.data( "some" ), "data", "Data is added" );
+ div.removeData( "some" );
+
+ // Make sure the expando is gone
+ for ( key in div[ 0 ] ) {
+ if ( /^jQuery/.test( key ) ) {
+ ok( false, "Expando was not removed when there was no more data" );
+ }
+ }
});
equal( result, 42, "inline handler returned value" );
});
+test( ".off() removes the expando when there's no more data", function() {
+ expect( 1 );
+
+ var key,
+ div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" );
+
+ div.on( "click", false );
+ div.on( "custom", function() {
+ ok( true, "Custom event triggered" );
+ } );
+ div.trigger( "custom" );
+ div.off( "click custom" );
+
+ // Make sure the expando is gone
+ for ( key in div[ 0 ] ) {
+ if ( /^jQuery/.test( key ) ) {
+ ok( false, "Expando was not removed when there was no more data" );
+ }
+ }
+});
+
// This tests are unreliable in Firefox
if ( !(/firefox/i.test( window.navigator.userAgent )) ) {
test( "Check order of focusin/focusout events", 2, function() {