使用javascript / jquery将我的网页焦点转到浏览器地址栏

期望的行为:当在网页中的特定dom元素上发生Tabkey按压时,我希望我的光标焦点转到地址栏。 (我希望它通过Javascript。使用任何浏览器扩展不是这里所需的)

当您在网页中按Control + L快捷键时,它会将您的焦点转移到地址栏。 但是当我尝试通过javascript触发它时,它确实无效。

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); } });

每个浏览器(和操作系统)处理不同的方式,目前无法使用javascript突出显示地址栏。 即使是这样,请记住,人们可以不同地映射这些命令(如果它们已经没有不同)。 例如,在mac上,访问地址栏的Command + LCommand + L ,而不是Ctrl + L

根据UI事件规范中的Trusted事件

由用户代理生成的事件,或者作为用户交互的结果,或者作为DOM更改的直接结果,由用户代理信任,而不具有脚本通过createEvent()生成的事件的特权方法,使用initEvent()方法修改,或通过dispatchEvent()方法dispatchEvent() 。 受信任事件的isTrusted属性值为true ,而不受信任事件的isTrusted属性值为false。

因此,触发CTRL+L事件对您的浏览器没有任何影响,这将需要一个受信任的事件来打开地址栏。

是的,正如一些人已经说过的那样,删除默认浏览器行为无助于访问。


从纯粹的技术角度来看,jQuery UI为您提供了一种非常快速的方式来回答您的评论中的用例。 这将转移到“keydown”上的最后一个可聚焦元素,然后当您重新复制tab键时,将转到页面后的默认元素(地址栏,具体取决于您的浏览器)

 $("#MyLastElement").on('keydown', function (e) { if((e.keyCode==9)&&(!e.shiftKey)) { $(":tabbable").last().focus(); } });