Tab 键始终隐藏日期选择器(辅助功能)

问题描述 投票:0回答:1
<input id="BirthDate.0" name="BirthDate.0" class="input-sm input_mask mask_date form-control hasDatepicker" onchange="updateFieldGrid('UpdateField', this)" style="" value="" type="text" aria-label="Birth Date" size="11" maxlength="10" placeholder="mm/dd/yyyy" autocomplete="off">

$('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");
        }
    }
});

我被要求使日期选择器更易于访问,IE 用户使用 Tab 键导航到出生日期字段,再次点击 Tab 键,日期选择器打开,他们可以通过键盘按钮导航选择器,他们点击 Tab再次关闭选择器并将焦点转移到下一个表单元素。

上面的代码让日期选择器在点击“tab”键时显示。但是,如果您按两次 Tab 键以将其从同一焦点文本输入字段中隐藏,

target.datepicker("widget").is(":visible")
仍会计算为
false
。事实上它总是评估为 false。如果我检查不同的按键,例如键码为 65 的“a”键,它确实会在第二次按键时隐藏日期选择器。我已经尝试过
event.preventDefault()
但这仍然不能解决问题。

在我的一生中,我无法调试为什么会发生这种情况,以及为什么每当我按“tab”时以及激活 keydown 事件处理程序之前它总是隐藏日期选择器。调试器在进入按键处理程序时显示它已经关闭,尽管当我按下该键时它已打开,并且大多数其他键不会发生这种情况。所以我的猜测是在调用 keydown 处理程序之前的上游某个地方它隐藏了日期选择器,但是在哪里?

编辑: 我在 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;

我将断点设置为基本上隐藏的日期选择器,它正在执行这段代码。它看起来是默认的日期选择器功能,用于隐藏选项卡按键上的日期选择器(键码= 9)。有什么办法可以覆盖这个吗?

javascript jquery datepicker
1个回答
0
投票

解决方案似乎是覆盖 keydown 事件的所有日期选择器的默认功能,即关闭日期选择器,即使按“tab”键时它已经打开。

这个 stackoverflow 的答案似乎可以解决它:

jQuery UI 日期选择器:配置键盘快捷键

虽然 stackoverflow 回答了我的问题,但它的问题与我面临的情况并不太相符,所以是否应该关闭它是值得怀疑的,因为 1)它涉及日期选择器中的键盘快捷键,而我不是根本不关心 2)他们并没有试图覆盖“选项卡”功能。

© www.soinside.com 2019 - 2024. All rights reserved.