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
}