所需行为:当在网页中的特定dom元素上发生Tabkey按下时,我希望我的光标焦点转到地址栏。 (我想通过Javascript。使用任何浏览器扩展都不是这里所需的)
当您在网页中按Control + L快捷键时,它会将您的焦点转移到地址栏。 但是当我尝试通过javascript触发它时,它确实无法正常工作。
<div id="1" tabindex="1"></div>
<div id="2" tabindex="1"></div>
<div id="3" tabindex="1"></div>
<script>
var some = $('#1');
some.on('keydown', function (e) {
if (e.keyCode == 9 /* TabKey */) {
var e = jQuery.Event("keydown");
e.keyCode = 76 /* LKey */;
e.ctrlKey = true;
$('body').trigger(e);
}
});
</script>
答案 0 :(得分:10)
每个浏览器(和操作系统)处理的方式不同,目前无法使用javascript突出显示地址栏。即使是这样,请记住,人们可以以不同的方式映射这些命令(如果它们已经不同)。例如,在mac上,访问地址栏的命令是Command + L
,而不是Ctrl + L
。
答案 1 :(得分:2)
根据UI事件规范中的Trusted events
用户代理生成的事件,无论是作为用户交互的结果,还是作为DOM更改的直接结果,都受到用户代理的信任,具有不通过脚本通过脚本生成的事件提供的特权。
createEvent()
方法,使用initEvent()
方法修改,或通过dispatchEvent()
方法调度。受信任事件的isTrusted
属性值为true
,而不受信任事件的isTrusted
属性值为false。
因此触发CTRL+L
事件对您的浏览器没有任何影响,这需要一个可信任的事件来打开地址栏。
是的,正如一些人已经说过的那样,删除默认浏览器行为无助于访问。
从纯粹的技术角度来看,jQuery UI为您提供了一种非常快速的方式来回答评论中的用例。这将转移到&#34; keydown&#34;上的最后一个可聚焦元素,然后当您重新复制tab键时,将转到页面后的默认元素(地址栏,具体取决于您的浏览器)
$("#MyLastElement").on('keydown', function (e) {
if((e.keyCode==9)&&(!e.shiftKey)) {
$(":tabbable").last().focus();
}
});