Код: Выделить всё
$('input[type="text"].hasDatepicker').keydown(function(event) {
var target = $(event.target);
if(event.keyCode == 9) {
if(!target.datepicker("widget").is(":visible")) {
target.datepicker("show");
} else {
target.datepicker("hide");
}
}
});
Приведенный выше код отображает средство выбора даты при нажатии на вкладку. ключ. Однако если вы дважды нажмете Tab, чтобы скрыть его из того же поля ввода текста с фокусом, target.datepicker("widget").is(":visible") все равно будет иметь значение false. На самом деле оно всегда имеет значение false. Если я проверю другое нажатие клавиши, скажем, клавишу «a» с кодом 65, она действительно скроет средство выбора даты при втором нажатии клавиши. Я попробовал event.preventDefault(), но это все равно не помогло.
Я хоть убей, не могу понять, почему это происходит и почему это происходит всегда скрывает средство выбора даты всякий раз, когда я нажимаю «tab» и до того, как активируется обработчик событий нажатия клавиши. Отладчик показывает, что он уже закрыт, когда он входит в обработчик нажатия клавиши, несмотря на то, что он был открыт, когда я нажал клавишу, и этого не происходит для большинства других клавиш. Итак, я предполагаю, что где-то выше по течению до вызова обработчика нажатия клавиш он скрывает средство выбора даты, но где?
Изменить:
Я нашел следующий фрагмент в jquery-ui- Файл 1.13.2.min.js:
Код: Выделить всё
_doKeyDown: function(a) {
var b, c = d.datepicker._getInst(a.target);
b = !0;
var f = c.dpDiv.is(".ui-datepicker-rtl");
c._keyEvent = !0;
if (d.datepicker._datepickerShowing)
switch (a.keyCode) {
case 9:
d.datepicker._hideDatepicker();
b = !1;
break;
Источник: https://stackoverflow.com/questions/781 ... essibility
Мобильная версия