Skip to content

Commit 04a50ff

Browse files
committed
Draggable: Changed the way handle and exclude is detected
1 parent 7850011 commit 04a50ff

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

tests/unit/draggable/draggable_options.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,32 @@ test( "{ cancel: ? }, unexpected", function() {
219219
});
220220
});
221221

222+
test("{ cancel: Selectors }, matching parent selector", function() {
223+
224+
expect( 5 );
225+
226+
var el = $("#draggable2").draggable({ cancel: "span a" });
227+
228+
$("#qunit-fixture").append( "<span id='wrapping'><a></a></span>" );
229+
230+
el.find( "span" ).append( "<a>" );
231+
232+
$("#wrapping a").append( el );
233+
234+
TestHelpers.draggable.testDrag(el, "#draggable2 span", 50, 50, 50, 50, "drag span child");
235+
TestHelpers.draggable.shouldNotMove( $("#draggable2 span a") );
236+
TestHelpers.draggable.shouldNotMove( $("#wrapping a") );
237+
238+
$("#draggable2").draggable( "option", "cancel", "span > a" );
239+
$("#draggable2").find( "a" ).append( "<a>" );
240+
241+
242+
TestHelpers.draggable.testDrag(el, $("#draggable2 span a").last(), 50, 50, 50, 50, "drag span child");
243+
TestHelpers.draggable.shouldNotMove( $("#draggable2 span a").first() );
244+
245+
});
246+
247+
222248
test("cancel, default, switching after initialization", function() {
223249
expect( 3 );
224250

@@ -556,6 +582,30 @@ test("{ handle: 'span' }", function() {
556582
TestHelpers.draggable.shouldNotMove(el, "drag element");
557583
});
558584

585+
test("{ handle: Selectors }, matching parent selector", function() {
586+
587+
expect( 4 );
588+
589+
var el = $("#draggable2").draggable({ handle: "span a" });
590+
591+
$("#qunit-fixture").append( "<span id='wrapping'><a></a></span>" );
592+
593+
el.find( "span" ).append( "<a>" );
594+
595+
$("#wrapping a").append( el );
596+
597+
TestHelpers.draggable.testDrag(el, "#draggable2 span a", 50, 50, 50, 50, "drag span child");
598+
TestHelpers.draggable.shouldNotMove( $("#wrapping a") );
599+
600+
$("#draggable2").draggable( "option", "handle", "span > a" );
601+
$("#draggable2").find( "a" ).append( "<a>" );
602+
603+
604+
TestHelpers.draggable.testDrag(el, $("#draggable2 span a").first(), 50, 50, 50, 50, "drag span child");
605+
TestHelpers.draggable.shouldNotMove( $("#draggable2 span a").last() );
606+
607+
});
608+
559609
test("handle, default, switching after initialization", function() {
560610
expect( 6 );
561611

ui/jquery.ui.draggable.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ $.widget( "ui.draggable", $.ui.interaction, {
7474
/** interaction interface **/
7575

7676
_isValidTarget: function( element ) {
77-
var handle = this.options.handle ? element.closest( this.options.handle ).length : true,
78-
exclude = this.options.exclude ? element.closest( this.options.exclude ).length : false;
77+
78+
var handle = this.options.handle ? element.is( this.element.find( this.options.handle ) ) : true,
79+
exclude = this.options.exclude ? element.is( this.element.find( this.options.exclude ) ) : false;
80+
7981

8082
// Enforce boolean
8183
return !!( handle && !exclude );

0 commit comments

Comments
 (0)