From: Mike Sherov Date: Sun, 9 Nov 2014 01:23:08 +0000 (-0500) Subject: Draggable: Ensure parent is correct after dragging through sortable X-Git-Tag: 1.12.0-beta.1~476 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d8077dc562bfca60906a160e20186608a10b7a87;p=jquery-ui.git Draggable: Ensure parent is correct after dragging through sortable Fixes #10669 --- diff --git a/tests/unit/draggable/draggable_options.js b/tests/unit/draggable/draggable_options.js index e54ae1df4..d8bbedc91 100644 --- a/tests/unit/draggable/draggable_options.js +++ b/tests/unit/draggable/draggable_options.js @@ -405,6 +405,29 @@ test( "connectToSortable, dragging through one sortable to a second", function() element.simulate( "drag", dragParams ); }); +test( "connectToSortable, dragging through a sortable", function() { + expect( 1 ); + + var draggable = $( "#draggableSortable" ).draggable({ + scroll: false, + connectToSortable: "#sortable2" + }), + sortable = $( "#sortable2" ).sortable(), + sortableOffset = sortable.offset(); + + // http://bugs.jqueryui.com/ticket/10669 + // Draggable: Position issue with connectToSortable + draggable.one( "dragstop", function() { + equal( draggable.parent().attr( "id" ), "sortable", "restored draggable to original parent" ); + }); + + draggable.simulate( "drag", { + x: sortableOffset.left + 25, + y: sortableOffset.top + sortable.outerHeight() + 400, + moves: 20 + }); +}); + test( "{ containment: Element }", function() { expect( 1 ); diff --git a/ui/draggable.js b/ui/draggable.js index b59955add..5be628dc8 100644 --- a/ui/draggable.js +++ b/ui/draggable.js @@ -800,6 +800,9 @@ $.ui.plugin.add( "draggable", "connectToSortable", { if ( !sortable.isOver ) { sortable.isOver = 1; + // Store draggable's parent in case we need to reappend to it later. + draggable._parent = ui.helper.parent(); + sortable.currentItem = ui.helper .appendTo( sortable.element ) .data( "ui-sortable-item", true ); @@ -876,8 +879,9 @@ $.ui.plugin.add( "draggable", "connectToSortable", { sortable.placeholder.remove(); } - // Recalculate the draggable's offset considering the sortable - // may have modified them in unexpected ways (#8809) + // Restore and recalculate the draggable's offset considering the sortable + // may have modified them in unexpected ways. (#8809, #10669) + ui.helper.appendTo( draggable._parent ); draggable._refreshOffsets( event ); ui.position = draggable._generatePosition( event, true );