aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/unit/draggable/core.js30
-rw-r--r--ui/widgets/draggable.js11
2 files changed, 35 insertions, 6 deletions
diff --git a/tests/unit/draggable/core.js b/tests/unit/draggable/core.js
index 2ec102598..1dd6f572a 100644
--- a/tests/unit/draggable/core.js
+++ b/tests/unit/draggable/core.js
@@ -338,6 +338,36 @@ QUnit.test( "blur behavior - descendant of handle", function( assert ) {
} );
} );
+QUnit.test( "blur behavior - off handle", function( assert ) {
+ var ready = assert.async();
+ assert.expect( 3 );
+
+ var element = $( "#draggable2" ).draggable( { handle: "span" } ),
+ focusElement = $( "<div tabindex='1'></div>" ).appendTo( element );
+
+ // Mock $.ui.safeBlur with a spy
+ var _safeBlur = $.ui.safeBlur;
+ var blurCalledCount = 0;
+ $.ui.safeBlur = function() {
+ blurCalledCount++;
+ };
+
+ testHelper.onFocus( focusElement, function() {
+ assert.strictEqual( document.activeElement, focusElement.get( 0 ), "test element is focused before mousing down on a draggable" );
+
+ testHelper.move( element, 1, 1 );
+ assert.strictEqual( blurCalledCount, 0, "draggable doesn't blur when mousing down off handle" );
+
+ testHelper.move( element.find( "span" ), 1, 1 );
+ assert.strictEqual( blurCalledCount, 1, "draggable blurs when mousing down on handle" );
+
+ // Restore safeBlur
+ $.ui.safeBlur = _safeBlur;
+
+ ready();
+ } );
+} );
+
QUnit.test( "ui-draggable-handle assigned to appropriate element", function( assert ) {
assert.expect( 5 );
diff --git a/ui/widgets/draggable.js b/ui/widgets/draggable.js
index 6b862d0d0..9e46c81bb 100644
--- a/ui/widgets/draggable.js
+++ b/ui/widgets/draggable.js
@@ -103,8 +103,6 @@ $.widget( "ui.draggable", $.ui.mouse, {
_mouseCapture: function( event ) {
var o = this.options;
- this._blurActiveElement( event );
-
// Among others, prevent a drag on a resizable-handle
if ( this.helper || o.disabled ||
$( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
@@ -117,6 +115,8 @@ $.widget( "ui.draggable", $.ui.mouse, {
return false;
}
+ this._blurActiveElement( event );
+
this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
return true;
@@ -147,11 +147,10 @@ $.widget( "ui.draggable", $.ui.mouse, {
var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
target = $( event.target );
- // Only blur if the event occurred on an element that is:
- // 1) within the draggable handle
- // 2) but not within the currently focused element
+ // Don't blur if the event occurred on an element that is within
+ // the currently focused element
// See #10527, #12472
- if ( this._getHandle( event ) && target.closest( activeElement ).length ) {
+ if ( target.closest( activeElement ).length ) {
return;
}