在javascript或JQuery中触发或返回shift + tab

时间:2012-02-15 16:52:38

标签: jquery tabs navigation keycode shift

我使用tabIndex制作了一个带有二维导航的Windows CE页面。起初我只想使用tabIndex作为下一个焦点的参考。

因为这个应用程序适用于便携式设备,所以这样做对手持设备要求很高,与简单的标签和shift +标签相比非常耗时。

我有一个函数可以为我的向上箭头和向下箭头处理onkeydown, 对于我的算命,代码很简单

if(specialMove == 0){所有这一切都是检查标签是否没有离开页面。

event.keyCode=9; return;}

问题是我的问题,我希望它返回一个SHIFT + TAB向上导航,我发现这个jQuery代码的snipet但我遇到了一个问题,使它工作。

if(specialMove == 0){
    $('body').trigger(JQuery.Event('keydown', {keyCode:9, shiftKey: true}));
    return;
}

2 个答案:

答案 0 :(得分:1)

在这种情况下,触发器仅调用在主体上定义的事件处理程序。它不会将密钥代码发送到浏览器。见:http://api.jquery.com/trigger/。简而言之,它只执行jQuery知道的代码,以便在keydown事件的情况下执行。它'模拟'一个keydown事件。

据我所知,无法向浏览器发送关键事件,因为这会带来一些严重的安全风险。您必须在Javascript中实现选择下一个和上一个元素。

编辑: 你可以尝试类似的东西:

$(function() {
  var navigationElements = $('[tabIndex]').sort(function(a,b) {
    return $(a).attr('tabindex') - $(b).attr('tabindex');
  });

  // We don't know if the users presses the up or down button first
  // so we initialize as null and let the event handle the first element
  var currentIndex = null;

  // On event:
  if (currentIndex != null && currentIndex < navigationElements.length - 1) {
    navigationElements[++currentIndex].focus();
  } else {
    currentIndex = 0;
    navigationElements[currentIndex].focus();
  }

  // and:
  if (currentIndex != null && currentIndex > 0) {
    navigationElements[--currentIndex].focus();
  } else {
    currentIndex = navigationElements.length - 1;
    navigationElements[currentIndex].focus();
  }
});

这是未经测试的未经优化的代码,所以可能有一个更好的解决方案,但即使在慢速浏览器上,这也会非常快。它没有考虑未通过您的事件进行的焦点更改,因此您必须添加onfocus个事件以将currentIndex设置为用户最后选择的元素。

答案 1 :(得分:0)

const keyupEvent = new Event('KeyboardEvent');
keyupEvent.initEvent('keyup');
Object.defineProperties(keyupEvent, {
  keyCode: {
    value: 9
  },
  shiftKey: {
    value: true
  }
});

...

element.dispatch(keyupEvent);

相关问题