在jQuery中拦截按键和更改焦点

时间:2015-04-19 21:55:35

标签: jquery

我有一个div.boxinput列表(每个都有两个输入字段)。如果按下向下箭头键,我需要更改其他输入的焦点。

我可以截取密钥,但我无法将焦点移动到另一个输入。

 $(document).keydown(function(e) {
       e.preventDefault();
       if (e.keyCode == 40) { 
         alert("down"); 

          // find where is the focus ? 
           var hasFocus = $('input').is(':focus');
           alert(hasFocus);


         // change focus ( problem here, don't change focus )
         if ( $(hasFocus).parent().hasClass("reso") ) {
             $(hasFocus).parent().prev().find("input").focus();
          }else{
             $(hasFocus).parent().next().find("input").focus();
          }

      }     

       if (e.keyCode == 37) { alert("left"); }
       if (e.keyCode == 38) { alert("top"); }
       if (e.keyCode == 39) { alert("right"); }
});

我在这里创建了我的实验:jsfiddle.net/andreaferri/mt95g9cu/7/

如何选择具有焦点的项目?

1 个答案:

答案 0 :(得分:0)

好的,所以这里是改变焦点的工作脚本。

var focused;
$('input').focus(function() {
          focused = $(this);
}); 
$(document).keydown(function(e) {
    e.preventDefault();
    if (e.keyCode == 40) { 
       if ( $(focused).parent().hasClass("reso") ) {
          $(focused).parent().prev().find("input").focus();
       } else {
          $(focused).parent().next().find("input").focus();
       }
    }               
});

如你所见,你必须得到这样的对象(这是我设置焦点输入的部分吗?):

var focused;
$('input').focus(function() {
   focused = $(this);
}); 

正如我所承诺的,你在这里工作jsFiddle。同样,这只是一个如何完成它的建议,它并不是所有键都完整的。它仅适用于按键,它只能在您关注的任何行中从左到右或从右到左切换。尝试一下,让我知道你是否还有其他问题,但这就是你的问题的答案,如何在按下键时改变对元素的关注。我想你了解它现在如何运作以及如何改变焦点。