[英]trigger or return shift+tab in javascript or JQuery
我使用 tabIndex 为带有二维导航的 Windows CE 制作了一个页面。 起初我只是想使用 tabIndex 作为下一个焦点的参考。
因为此应用程序适用于便携式设备,因此与简单的 tab 和 shift+tab 相比,这样做对手持设备的要求非常高,并且非常耗时。
我有一个函数来处理我的向上箭头和向下箭头的 onkeydown,对于我的向下箭头,代码很简单
if(specialMove == 0){
所有这一切都是检查选项卡没有离开页面。
event.keyCode=9; return;}
问题是我的向上箭头,我希望它返回一个 SHIFT+TAB 来向上导航,我发现了这段 jQuery 代码,但是我在使它工作时遇到了问题。
if(specialMove == 0){
$('body').trigger(JQuery.Event('keydown', {keyCode:9, shiftKey: true}));
return;
}
在这种情况下,触发器仅调用主体上定义的事件处理程序。 它不会将密钥代码发送到浏览器。 请参阅: http : //api.jquery.com/trigger/ 。 简而言之,它只执行 jQuery 知道在 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
设置为用户最后选择的元素。
const keyupEvent = new Event('KeyboardEvent'); keyupEvent.initEvent('keyup'); Object.defineProperties(keyupEvent, { keyCode: { value: 9 }, shiftKey: { value: true } }); ... element.dispatch(keyupEvent);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.