javascript - 在 JavaScript 中使用箭头键移动焦点

标签 javascript jquery

我希望能够使用箭头键浏览我网页上所有可聚焦的元素。因此,当按下向下键时,焦点应该转移到当前聚焦元素下方的可聚焦元素。您了解其他箭头键的想法,当没有要转移到的可聚焦元素时,焦点应保持不变。

这是我到目前为止得到的:

$(document).keydown(function(e){    

if (e.keyCode == 37) { //left

   var offset = $("*:focus").offset();

   var allElements = $("#container").find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]');

   var arr = jQuery.makeArray(allElements);

   var topLeft = offset.left
   var minus = topLeft;
   var currentElement = $("*:focus");

   for(var i = 0; i < arr.length; i++)
   {

      if ( (arr[i].offset().left < offset.left)  // This doesn't work for some reason
        && ((offset.left - arr[i].offset().left) < minus))
      {
        currentElement = arr[i];
        minus = offset.left - arr[i].offset().left;
        topLeft = arr[i].offset().left;
      }


      currentElement.focus();
   }


   alert( "left pressed" );
   return false;
}

// Other Keys

});

我们的想法是获得所有可聚焦的元素,然后选择适合箭头和转移焦点的元素。

我无法让这段代码工作(它包含一个错误),而且我不能完全确定它是否会工作。

提前致谢

[编辑]:我想我有点含糊。我不仅要左右走,还要上下走。

最佳答案

我要做的要简单得多。只需在应该具有此功能(例如“移动”)的对象中添加一个公共(public)类并使用:

$(document).keydown(
    function(e)
    {    
        if (e.keyCode == 39) {      
            $(".move:focus").next().focus();

        }
        if (e.keyCode == 37) {      
            $(".move:focus").prev().focus();

        }
    }
);
​

参见示例:http://jsfiddle.net/uJ4PJ/

此代码简单得多,希望具有您需要的所有功能。

只需确保控件的顺序正确,否则将无法正常工作。

关于javascript - 在 JavaScript 中使用箭头键移动焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088674/

相关文章:

javascript - AngularJS - 表单提交

javascript - 如何使两个 Canvas 元素发生碰撞

javascript - 如何使用ajax将javascript变量中的值放入php变量中

jquery - D3雷达图数据更新不起作用

javascript - 如何去除圆圈中的黑色?

javascript - 限制 Bootstrap 上切换开关的数量

javascript - 使用基于 iframe 的 View 很难访问 Dynamics 2013 访问页面实体

javascript - 如何从 json 文件加载多个标记?

javascript - Webpack 在 JS 文件中抛出一个奇怪的语法错误

javascript - Ajaxify 链接,以便它仍然可以在单击时访问地址,但不会更改页面