Search and Top Navigation
#13649 closed bug (fixed)
Opened July 14, 2015 09:13PM UTC
Closed July 17, 2015 03:02PM UTC
Last modified July 17, 2015 03:02PM UTC
Modal dialog removes all document focusin handlers in _destroyOverlay
Reported by: | RandScullard | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | 1.12.0 |
Component: | ui.dialog | Version: | 1.11.4 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
The dialog widget uses this._on to add a focusin event handler at the document level in the _createOverlay function:
this._on( this.document, { focusin: function( event ) { if ( isOpening ) { return; } if ( !this._allowInteraction( event ) ) { event.preventDefault(); this._trackingInstances()[ 0 ]._focusTabbable(); } } });
However, it then uses unbind to remove the handler in the _destroyOverlay function:
this.document .unbind( "focusin" ) .removeData( "ui-dialog-overlays" );
As a result, it removes all focusin handlers at the document level, rather than just its own. It seems that it should use this._off instead:
this._off( this.document, "focusin" ); this.document .removeData( "ui-dialog-overlays" );
Here is a reduced test case that demonstrates the problem: https://jsfiddle.net/eu4ua6kj/2/
Dialog: Fix removal of event listener for modal dialogs
Fixes #13649
Changeset: 62446d957efb69cd53015919edf71501fcbd2599