注意this问题。我看到除了触发tab buttonpress事件之外还有其他方法,但我仍然想知道为什么触发tab键按下事件不会将焦点移动到下一个输入字段。
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
});
}
});
答案 0 :(得分:8)
因为tab事件是用于更改焦点的本机浏览器事件/操作。 .trigger()
函数仅触发分配给它的事件处理程序。请注意,jQuery's site提供了更多信息:
.trigger()函数不能用于模仿本机浏览器事件,例如单击文件输入框或锚标记。这是因为,没有使用与这些事件相对应的jQuery事件系统附加事件处理程序。
虽然名为jquery-simulate,但有一个插件可以解决这个问题。也就是说,tab
键更改焦点实际上是Web浏览器中的默认操作。触发浏览器原生事件并不意味着它会执行默认操作,因为KeyboardEvents的文档提到:
请注意,手动触发事件不会生成与该事件关联的默认操作。例如,手动触发键事件不会导致该字母出现在焦点文本输入中。对于UI事件,出于安全原因这很重要,因为它可以防止脚本模拟与浏览器本身交互的用户操作。