Datepicker: Hide the UI on destroy

When the datepicker UI is shown and then destroyed programmatically:
```js
$( "#datepicker" ).datepicker( "destroy" );
```
hide the datepicker UI without the need for an explicit user action.
Previously, in 1.12 the UI would not disappear immediately but only after the
first `mousedown`. In later 1.13 versions, the UI would not disappear at all.

Fixes gh-2178
Closes gh-2268
This commit is contained in:
Porter Clevidence 2024-08-05 10:30:53 -07:00 committed by GitHub
parent a0c5b12e82
commit 02a6e6bcb0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 1 deletions

View File

@ -11,7 +11,7 @@ var beforeAfterEach = testHelper.beforeAfterEach;
QUnit.module( "datepicker: methods", beforeAfterEach() );
QUnit.test( "destroy", function( assert ) {
assert.expect( 35 );
assert.expect( 39 );
var inl,
inp = testHelper.init( "#inp" ),
dp = $( "#ui-datepicker-div" );
@ -21,6 +21,15 @@ QUnit.test( "destroy", function( assert ) {
assert.equal( dp.css( "display" ), "block", "Datepicker - visible" );
inp.datepicker( "hide" ).datepicker( "destroy" );
assert.ok( $.datepicker._curInst == null, "Datepicker - destroyed and cleared reference" );
assert.equal( dp.css( "display" ), "none", "Datepicker - absent" );
// Destroy without manual hiding (ensure datepicker is hidden after calling destroy)
inp = testHelper.init( "#inp" );
inp.datepicker( "show" );
assert.equal( dp.css( "display" ), "block", "Datepicker - visible" );
inp.datepicker( "destroy" );
assert.ok( $.datepicker._curInst == null, "Datepicker - destroyed and cleared reference" );
assert.equal( dp.css( "display" ), "none", "Datepicker - absent" );
inp = testHelper.init( "#inp" );
assert.ok( inp.is( ".hasDatepicker" ), "Default - marker class set" );

View File

@ -435,6 +435,7 @@ $.extend( Datepicker.prototype, {
$target.removeClass( this.markerClassName ).empty();
}
$.datepicker._hideDatepicker();
if ( datepicker_instActive === inst ) {
datepicker_instActive = null;
this._curInst = null;