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

Ada*_*ner 8 javascript jquery

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

密码笔

HTML

<textarea></textarea>
<textarea></textarea>
<textarea></textarea>
Run Code Online (Sandbox Code Playgroud)

JS

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

Spe*_*rek 10

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

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

有一个插件,虽然称为jquery-simulate来处理这个问题.据说,tab关键改变焦点实际上是Web浏览器中的默认操作.触发浏览器本机事件并不意味着它会执行默认操作,因为KeyboardEvents的文档提到:

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

  • @AdamZerner在[`KeyEvents`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)的文档中,这实际上有点误导.在页面底部有一个注释提到:*"请注意,手动触发事件不会生成与该事件关联的默认操作.例如,手动触发键事件不会导致该字母出现在焦点中文本输入.对于UI事件,出于安全原因这很重要,因为它可以防止脚本模拟与浏览器本身交互的用户操作."* (2认同)