]> source.dussan.org Git - jquery-ui.git/commitdiff
Datepicker: Add option for onUpdateDatepicker callback
authorPatrick McKay <patrick.mckay@vumc.org>
Sun, 1 Mar 2020 13:13:05 +0000 (07:13 -0600)
committerFelix Nagel <fnagel@users.noreply.github.com>
Fri, 21 May 2021 15:58:10 +0000 (17:58 +0200)
Add a new option named onUpdateDatepicker that allows a custom callback
to be provided. If provided, the callback is called at the end of
$.datepicker._updateDatepicker.

tests/unit/datepicker/options.js
ui/widgets/datepicker.js

index e58b9a75df5a8940d76acca16808fa1d4df996f1..0ce771c5e0fbdb4f89e24c27a484a3e63b8f9e9c 100644 (file)
@@ -813,7 +813,9 @@ var beforeShowThis = null,
        beforeShowInput = null,
        beforeShowInst = null,
        beforeShowDayThis = null,
-       beforeShowDayOK = true;
+       beforeShowDayOK = true,
+       onUpdateDatepickerThis = null,
+       onUpdateDatepickerInst = null;
 
 function beforeAll( input, inst ) {
        beforeShowThis = this;
@@ -830,8 +832,14 @@ function beforeDay( date ) {
                ( date.getDate() % 3 === 0 ? "Divisble by 3" : "" ) ];
 }
 
+function onUpdateDatepicker( inst ) {
+       onUpdateDatepickerThis = this;
+       onUpdateDatepickerInst = inst;
+       inst.dpDiv.append( $( "<div>" ).addClass( "on-update-datepicker-test" ) );
+}
+
 QUnit.test( "callbacks", function( assert ) {
-       assert.expect( 13 );
+       assert.expect( 16 );
 
        // Before show
        var dp, day20, day21,
@@ -860,6 +868,14 @@ QUnit.test( "callbacks", function( assert ) {
        assert.ok( !day20.attr( "title" ), "Before show day - title 20" );
        assert.ok( day21.attr( "title" ) === "Divisble by 3", "Before show day - title 21" );
        inp.datepicker( "hide" ).datepicker( "destroy" );
+
+       inp = testHelper.init( "#inp", { onUpdateDatepicker: onUpdateDatepicker } );
+       inst = $.data( inp[ 0 ], "datepicker" );
+       dp = $( "#ui-datepicker-div" );
+       inp.val( "02/04/2008" ).datepicker( "show" );
+       assert.ok( onUpdateDatepickerThis.id === inp[ 0 ].id, "On update datepicker - this OK" );
+       assert.deepEqual( onUpdateDatepickerInst, inst, "On update datepicker - inst OK" );
+       assert.ok( dp.find( "div.on-update-datepicker-test" ).length > 0, "On update datepicker - custom element" );
 } );
 
 QUnit.test( "beforeShowDay - tooltips with quotes", function( assert ) {
index 830dc5863a0037fefc7d6589b8e348ddce105d26..d363c8fc65601a2f074c8c34c2ee390558d72751 100644 (file)
@@ -142,6 +142,7 @@ function Datepicker() {
                onSelect: null, // Define a callback function when a date is selected
                onChangeMonthYear: null, // Define a callback function when the month or year is changed
                onClose: null, // Define a callback function when the datepicker is closed
+               onUpdateDatepicker: null, // Define a callback function when the datepicker is updated
                numberOfMonths: 1, // Number of months to show at a time
                showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
                stepMonths: 1, // Number of months to step back/forward
@@ -857,7 +858,8 @@ $.extend( Datepicker.prototype, {
                        numMonths = this._getNumberOfMonths( inst ),
                        cols = numMonths[ 1 ],
                        width = 17,
-                       activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+                       activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ),
+                       onUpdateDatepicker = $.datepicker._get( inst, "onUpdateDatepicker" );
 
                if ( activeCell.length > 0 ) {
                        datepicker_handleMouseover.apply( activeCell.get( 0 ) );
@@ -888,6 +890,10 @@ $.extend( Datepicker.prototype, {
                                origyearshtml = inst.yearshtml = null;
                        }, 0 );
                }
+
+               if ( onUpdateDatepicker ) {
+                       onUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );
+               }
        },
 
        // #6694 - don't focus the input if it's already focused