【发布时间】:2010-10-16 16:46:31
【问题描述】:
我想让浏览器的行为就像用户在点击某物时按下了 Tab 键一样。在点击处理程序中,我尝试了以下方法:
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
还有 jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
...我取自 here。
第一种方法似乎是最好的选择,但不太奏效。如果我将最后两个参数更改为 98、98,实际上,在输入框中输入了一个“b”。但是 9, 0 和 9, 9(我直接从 MDC 网站获取的前者)在 FF3 下的 firebug 中都给了我这些错误:
Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
我听说此类(没有明确定义“此类”)事件是“不受信任的”,这可能解释了这些错误。
第二种方法会导致我作为 event.which 输入的任何值都作为 event.which 传递,但没有效果(即使我使用 98 而不是 9,也不会在框中输入“b”。)如果我尝试在我传递的对象中设置 event.data,当事件被触发时,它最终是未定义的。以下是我用来查看的代码:
$('#hi').keypress(function(e) {
console.log(e);
});
还有其他想法吗?
【问题讨论】:
-
你想调用什么?您是否尝试将它们移至下一个输入?
-
是的。但下一个“输入”不一定是输入或其他自然制表符元素。它也不一定非自然地制表符(即 $("[tabindex]") )。物理按 Tab(或 shift+tab)完全符合我的要求......
-
谢谢。我只对您问题的第一个代码示例感兴趣,这真的很有帮助:)
-
也遇到了这个问题,很想知道那些
untrusted事件的列表 -
相关:stackoverflow.com/questions/1601593/… 接受的答案提到了
...firing an event doesn't trigger the default result of the user action, for security reasons...
标签: javascript jquery html events keyboard