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

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

密码笔

HTML

   

JS

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

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

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

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

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