2

Facebook 有文本区域,它们在其中扩展/缩小到其中的文本大小。在我的 Chrome 扩展程序中,我将 textarea 中的文本更改为多行。但是,textareas 扩展/收缩方法仅适用于键盘事件,所以我必须触发一个。

var event = document.createEvent('KeyboardEvent');

event.initEvent('keyup', true, true, window, false, false, false, false, 38, 38);
this.dispatchEvent(event); // this is the textarea

(它对所有的 keyup、keydown、keypress 执行此操作)

但这不起作用。现在,我知道它为什么不起作用,但不知道如何解决它。我已将处理程序附加到元素以查看发生了什么:

$('[role=dialog] .MessagingComposerForm textarea').on('keyup', function(e) {
    console.log(e);
});

当 Chrome 扩展程序触发它的 keyup 事件时,我在控制台中看到的对象是一个普通的 Event 对象,除了两件事:keyCode=0 和 view=null。

当我通过按键盘上的一个键触发 keyup 事件时,我可以看到 keyCode=38 和 view=Window。

有谁知道如何做到这一点?

添加:

我发现了一些东西。如果我在调度事件之前对其进行控制台记录,它仍然不包含正确的信息。这里:

var event = document.createEvent('KeyboardEvent');

event.initKeyboardEvent('keydown', true, true, window, false, false, false, false, 65, 65);
event.keyCode = 65;
event.which = 65;
event.charCode = 65;

console.log(event);

this.dispatchEvent(event); // this is the textarea

输出这个对象:

KeyboardEvent: {
    ...
    charCode: 0,
    keyCode: 0,
    view: Window,
    which: 0
}
4

1 回答 1

0

这是 WebKit 中的一个错误:https ://bugs.webkit.org/show_bug.cgi?id=16735

30个字符

于 2012-11-04T02:39:16.963 回答