mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
Widget: Hook into jQuery.cleanData to auto-destroy widgets. Fixes #6008 - Widget: auto-destroy is broken in jQuery 1.4.
This commit is contained in:
parent
e5f3bfce4d
commit
0a0a39f896
@ -29,7 +29,9 @@
|
||||
<div id="main" style="position: absolute; top: -10000px; left: -10000px;">
|
||||
|
||||
<div id="widget-wrapper">
|
||||
<div id="widget"></div>
|
||||
<div id="widget">
|
||||
<div>...</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -409,4 +409,71 @@ test( "._trigger() - provide event and ui", function() {
|
||||
.testWidget( "testEvent" );
|
||||
});
|
||||
|
||||
test( "auto-destroy - .remove()", function() {
|
||||
expect( 1 );
|
||||
$.widget( "ui.testWidget", {
|
||||
_create: function() {},
|
||||
destroy: function() {
|
||||
ok( true, "destroyed from .remove()" );
|
||||
}
|
||||
});
|
||||
$( "#widget" ).testWidget().remove();
|
||||
});
|
||||
|
||||
test( "auto-destroy - .remove() on parent", function() {
|
||||
expect( 1 );
|
||||
$.widget( "ui.testWidget", {
|
||||
_create: function() {},
|
||||
destroy: function() {
|
||||
ok( true, "destroyed from .remove() on parent" );
|
||||
}
|
||||
});
|
||||
$( "#widget" ).testWidget().parent().remove();
|
||||
});
|
||||
|
||||
test( "auto-destroy - .remove() on child", function() {
|
||||
$.widget( "ui.testWidget", {
|
||||
_create: function() {},
|
||||
destroy: function() {
|
||||
ok( false, "destroyed from .remove() on child" );
|
||||
}
|
||||
});
|
||||
$( "#widget" ).testWidget().children().remove();
|
||||
// http://github.com/jquery/qunit/pull/34
|
||||
$.ui.testWidget.prototype.destroy = $.noop;
|
||||
});
|
||||
|
||||
test( "auto-destroy - .empty()", function() {
|
||||
$.widget( "ui.testWidget", {
|
||||
_create: function() {},
|
||||
destroy: function() {
|
||||
ok( false, "destroyed from .empty()" );
|
||||
}
|
||||
});
|
||||
$( "#widget" ).testWidget().empty();
|
||||
// http://github.com/jquery/qunit/pull/34
|
||||
$.ui.testWidget.prototype.destroy = $.noop;
|
||||
});
|
||||
|
||||
test( "auto-destroy - .empty() on parent", function() {
|
||||
expect( 1 );
|
||||
$.widget( "ui.testWidget", {
|
||||
_create: function() {},
|
||||
destroy: function() {
|
||||
ok( true, "destroyed from .empty() on parent" );
|
||||
}
|
||||
});
|
||||
$( "#widget" ).testWidget().parent().empty();
|
||||
});
|
||||
|
||||
test( "auto-destroy - .detach()", function() {
|
||||
$.widget( "ui.testWidget", {
|
||||
_create: function() {},
|
||||
destroy: function() {
|
||||
ok( false, "destroyed from .detach()" );
|
||||
}
|
||||
});
|
||||
$( "#widget" ).testWidget().detach();
|
||||
});
|
||||
|
||||
})( jQuery );
|
||||
|
36
ui/jquery.ui.widget.js
vendored
36
ui/jquery.ui.widget.js
vendored
@ -9,20 +9,30 @@
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
|
||||
var _remove = $.fn.remove;
|
||||
|
||||
$.fn.remove = function( selector, keepData ) {
|
||||
return this.each(function() {
|
||||
if ( !keepData ) {
|
||||
if ( !selector || $.filter( selector, [ this ] ).length ) {
|
||||
$( "*", this ).add( [ this ] ).each(function() {
|
||||
$( this ).triggerHandler( "remove" );
|
||||
});
|
||||
}
|
||||
// jQuery 1.4+
|
||||
if ( $.cleanData ) {
|
||||
var _cleanData = $.cleanData;
|
||||
$.cleanData = function( elems ) {
|
||||
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
||||
$( elem ).triggerHandler( "remove" );
|
||||
}
|
||||
return _remove.call( $(this), selector, keepData );
|
||||
});
|
||||
};
|
||||
_cleanData( elems );
|
||||
};
|
||||
} else {
|
||||
var _remove = $.fn.remove;
|
||||
$.fn.remove = function( selector, keepData ) {
|
||||
return this.each(function() {
|
||||
if ( !keepData ) {
|
||||
if ( !selector || $.filter( selector, [ this ] ).length ) {
|
||||
$( "*", this ).add( [ this ] ).each(function() {
|
||||
$( this ).triggerHandler( "remove" );
|
||||
});
|
||||
}
|
||||
}
|
||||
return _remove.call( $(this), selector, keepData );
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
$.widget = function( name, base, prototype ) {
|
||||
var namespace = name.split( "." )[ 0 ],
|
||||
|
Loading…
Reference in New Issue
Block a user