diff options
author | TJ VanToll <tj.vantoll@gmail.com> | 2014-07-15 15:16:26 -0400 |
---|---|---|
committer | TJ VanToll <tj.vantoll@gmail.com> | 2014-07-15 15:49:15 -0400 |
commit | 3ca32b2ad8a3366d14317eb767e89d28254e97a4 (patch) | |
tree | 5aba1ae78a321814806f21d3c0de6ce5eef3a733 | |
parent | 7594a3142547e078326872cb0d6e2d7f32f4c808 (diff) | |
download | jquery-ui-3ca32b2ad8a3366d14317eb767e89d28254e97a4.tar.gz jquery-ui-3ca32b2ad8a3366d14317eb767e89d28254e97a4.zip |
Draggable: Manage ui-draggable-handle correctly in nested instances
-rw-r--r-- | tests/unit/draggable/draggable_core.js | 13 | ||||
-rw-r--r-- | ui/draggable.js | 10 |
2 files changed, 17 insertions, 6 deletions
diff --git a/tests/unit/draggable/draggable_core.js b/tests/unit/draggable/draggable_core.js index beab67f19..dd526e5ec 100644 --- a/tests/unit/draggable/draggable_core.js +++ b/tests/unit/draggable/draggable_core.js @@ -291,4 +291,17 @@ test( "ui-draggable-handle assigned to appropriate element", function() { ok( !element.find( "p" ).hasClass( "ui-draggable-handle" ), "removed in destroy()" ); }); +test( "ui-draggable-handle managed correctly in nested draggables", function() { + expect( 4 ); + var parent = $( "<div><div></div></div>" ).draggable().appendTo( "#qunit-fixture" ), + child = parent.find( "div" ).draggable(); + + ok( parent.hasClass( "ui-draggable-handle" ), "parent has class name on init" ); + ok( child.hasClass( "ui-draggable-handle" ), "child has class name on init" ); + + parent.draggable( "destroy" ); + ok( !parent.hasClass( "ui-draggable-handle" ), "parent loses class name on destroy" ); + ok( child.hasClass( "ui-draggable-handle" ), "child retains class name on destroy" ); +}); + })( jQuery ); diff --git a/ui/draggable.js b/ui/draggable.js index cd87ad2fc..5f29f4cf8 100644 --- a/ui/draggable.js +++ b/ui/draggable.js @@ -78,6 +78,7 @@ $.widget("ui.draggable", $.ui.mouse, { _setOption: function( key, value ) { this._super( key, value ); if ( key === "handle" ) { + this._removeHandleClassName(); this._setHandleClassName(); } }, @@ -314,16 +315,13 @@ $.widget("ui.draggable", $.ui.mouse, { }, _setHandleClassName: function() { - var handle = this.options.handle ? + this.handleElement = this.options.handle ? this.element.find( this.options.handle ) : this.element; - this._removeHandleClassName(); - handle.addClass( "ui-draggable-handle" ); + this.handleElement.addClass( "ui-draggable-handle" ); }, _removeHandleClassName: function() { - this.element.find( ".ui-draggable-handle" ) - .addBack() - .removeClass( "ui-draggable-handle" ); + this.handleElement.removeClass( "ui-draggable-handle" ); }, _createHelper: function(event) { |