为什么不模拟tab键按键将焦点移动到下一个输入字段?

时间:2015-09-06 22:43:32

标签: javascript jquery

注意this问题。我看到除了触发tab buttonpress事件之外还有其他方法,但我仍然想知道为什么触发tab键按下事件不会将焦点移动到下一个输入字段。

Code Pen

HTML

<textarea></textarea>
<textarea></textarea>
<textarea></textarea>

JS

$('textarea').on('keydown', function(e) {
  if (e.metaKey && e.which === 40) {
    console.log('test');
    $(this).trigger({
      type: 'keypress',
      which: 9
    });
  }
});

1 个答案:

答案 0 :(得分:8)

因为tab事件是用于更改焦点的本机浏览器事件/操作。 .trigger()函数仅触发分配给它的事件处理程序。请注意,jQuery's site提供了更多信息:

  

.trigger()函数不能用于模仿本机浏览器事件,例如单击文件输入框或锚标记。这是因为,没有使用与这些事件相对应的jQuery事件系统附加事件处理程序。

虽然名为jquery-simulate,但有一个插件可以解决这个问题。也就是说,tab键更改焦点实际上是Web浏览器中的默认操作。触发浏览器原生事件并不意味着它会执行默认操作,因为KeyboardEvents的文档提到:

  

请注意,手动触发事件不会生成与该事件关联的默认操作。例如,手动触发键事件不会导致该字母出现在焦点文本输入中。对于UI事件,出于安全原因这很重要,因为它可以防止脚本模拟与浏览器本身交互的用户操作。