【问题标题】:How do I capture a keypress when focus is on my styled DIV?当焦点位于我的样式 DIV 上时,如何捕获按键?
【发布时间】:2016-12-30 03:48:59
【问题描述】:

我使用的是 jQuery 1.12。我的页面上有几个样式化的选择菜单。当一个处于活动状态时,我希望能够按“Tab”,然后将焦点转移到下一个样式选择菜单。我正在尝试这个

return $('div.select-styled:first').keydown(function(e) {
  alert("key pressed");
  if (e.which === 9) {
    $('div.select-styled.active').each(function() {
      return $(this).removeClass('active').next('ul.select-options').hide();
    });
    return $('div.select-styled:second').focus().click();
  }
});

但什么也没发生。您可以从我的 Fiddle — http://jsfiddle.net/cwzjL2uw/5/ 中看到,您可以在姓氏字段上单击“Tab”,然后激活第一个样式选择菜单,但再次单击“Tab”则无济于事。如何从我的样式选择菜单中捕获按键事件?

【问题讨论】:

    标签: jquery html css jquery-ui keypress


    【解决方案1】:

    样式化的 select 元素是通过 div 元素实现的,除非它具有 tabindex 属性,否则无法获得焦点。如果您希望元素变得可聚焦,可以将 tabindex 设置为 -1

    对于您的代码,wrapper 可以设置为:

    var $wrapper = $("<div />", {
      'class': "select",
      'tabindex': '-1'
    })
    

    那么您的代码可能会按您的预期工作。

    但是,tab焦点已经是borwser提供的一个基本功能,这意味着你应该监听而不是监听tab键事件 到focusblur 事件并更新您的控件的表示。在这种情况下,您应该将tabindex 设置为1,并添加事件处理程序。 然后你可以移除keydown事件监听器以及body上的监听器来检测失去焦点。

    这是您可以检查的更新小提琴: JS Fiddle

    另见:

    【讨论】:

    • 此外,您需要使用nth-child(2) 来选择第二个select 元素,而不是second
    • 谢谢。虽然它在 Chrome 上运行良好(我可以从一个菜单切换到下一个菜单),但在 Firefox 上我不能从一个菜单切换到下一个菜单。是否有一种方法可以让这段代码跨浏览器——至少让它在 Chroem 和 Firefox 上都可以工作?
    • 更新了代码 (fiddle) 并将 input 和样式 selecttabindex 设置为 1。因此 Firefox 将在这些元素中迭代焦点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多