Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Yes you are right, even I got this error some time back but just neglected it. But this time i looked into the datepicker script where I found as it might be bug. This is reproducible in specific way only as you have mentioned</p> <ul> <li>Click on the field/ bring focus on it by using tab</li> <li>press enter</li> </ul> <p>You will have callback function 'onSelect' called twice.</p> <p>This is because in datepicker javascript, '_selectDate' function is used to get the selected date which is called from key event handler function(_doKeyDown()->_selectDay()->_selectDate()) and both functions invokes the call back function which seems to be bug.</p> <hr> <p>Updates -</p> <p>I have modified the _doKeyDown function in jquery.ui.datepicker.js file. I have modified the code when event is enter(keycode-13). <strong>So now callback function 'onSelect' is called once in above scenario.</strong> </p> <p>Here is the code for version 1.8.21 </p> <pre><code>_doKeyDown: function(event) { var inst = $.datepicker._getInst(event.target); var handled = true; var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); inst._keyEvent = true; if ($.datepicker._datepickerShowing) switch (event.keyCode) { case 9: $.datepicker._hideDatepicker(); handled = false; break; // hide on tab out case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + $.datepicker._currentClass + ')', inst.dpDiv); //Update by Sunil start if (sel[0]){ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); }else{ $.datepicker._hideDatepicker(); return true; } //Update by Sunil end return false; break; // select the value on enter case 27: $.datepicker._hideDatepicker(); break; // hide on escape case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); break; // previous month/year on page up/+ ctrl case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); break; // next month/year on page down/+ ctrl case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); handled = event.ctrlKey || event.metaKey; break; // clear on ctrl or command +end case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); handled = event.ctrlKey || event.metaKey; break; // current on ctrl or command +home case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); handled = event.ctrlKey || event.metaKey; // -1 day on ctrl or command +left if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); // next month/year on alt +left on Mac break; case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); handled = event.ctrlKey || event.metaKey; break; // -1 week on ctrl or command +up case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); handled = event.ctrlKey || event.metaKey; // +1 day on ctrl or command +right if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); // next month/year on alt +right break; case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); handled = event.ctrlKey || event.metaKey; break; // +1 week on ctrl or command +down default: handled = false; } else if (event.keyCode == 36 &amp;&amp; event.ctrlKey) // display the date picker on ctrl+home $.datepicker._showDatepicker(this); else { handled = false; } if (handled) { event.preventDefault(); event.stopPropagation(); } }, </code></pre> <p>I hope this would fix your problem.</p> <hr> <p>Update 2 There is another workaround as answered by user1042031 but not complete solution. Here you will find what you need to do</p> <pre><code>$("#datepicker").datepicker({ onSelect: function(dateText,inst) { $.datepicker._hideDatepicker(); inst.preventDefault(); } }); </code></pre> <p>You need to remove alert which causes to set focus on input field which will show datepicker again. This is call onSelect once for sure hiding the datepicker after pressing enter key.</p> <p><a href="http://jsfiddle.net/chavansi/hAkhY/" rel="nofollow"><strong>DEMO</strong></a></p> <p>I am copying the part of solution just to have both working ways :)</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload