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

时间:2017-07-25 13:27:03

标签: javascript jquery html keyboard-shortcuts accessibility

所需行为:当在网页中的特定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>

2 个答案:

答案 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();
  }
});