我使用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;
}
答案 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);