如何使用Javascript在Safari中生成按键事件?

Gre*_*reg 5 javascript safari

如何以编程方式从Safari中运行的Javascript代码生成按键事件?看起来WebKit使用DOM 3级模型从Javascript创建键盘事件,而DOM 3级键盘事件模型不支持keypress事件.还有其他方法可以使用吗?

我正在寻找尽可能纯粹的Safari/WebKit DOM解决方案.我真的不想修改网页,我也不想在外部库上添加依赖项.我需要激活任何现有的按键处理程序,因此无法添加新的处理程序并直接调用它.

看起来WebKit具有在其UIEvent类中定义的keypress事件的keyCode和charCode属性,但它们是只读的.有没有办法设置这些属性?以下不起作用:

var evt = document.createEvent('UIEvents');
evt.initUIEvent('keypress', true, true, window, 0);
evt.keyCode = 114; // 'r'
evt.charCode = 114;
alert("keyCode = " + evt.keyCode + ", charCode = " + evt.charCode); // both 0
Run Code Online (Sandbox Code Playgroud)

在调用initUIEvent时设置detail属性似乎也没有任何效果.

小智 6

使用TextEvent(由DOM3引入).由于您正在寻找生成按键事件,我猜你正在使用角色.在下面的代码中,textToInsert是一个字符串,而textarea是我将事件调度到的元素.

var eventObject = document.createEvent('TextEvent');
eventObject.initTextEvent('textInput',
                          true,
                          true,
                          null,
                          textToInsert);

textarea.dispatchEvent(eventObject);
Run Code Online (Sandbox Code Playgroud)

这适用于Safari 3.1.2(因此在Chrome上).


Mat*_*att -1

http://docs.jquery.com/Events/keypress#fn

换句话说,您将按键事件附加到某个元素。使用 ID 为“someid”的元素,例如:

<script language="text/javascript" src="jquery.js"></script>
<script language="text/javascript">
$(function() {
    // add a keypress handler
    $("#someid").keypress(function(e){
        alert('you just pressed ' + e.which);
    });
    // imitate the keypress
    $("#someid").keypress();
});
</script>
Run Code Online (Sandbox Code Playgroud)