Facebook有textarea的地方,他们扩展/缩小到其内部文本的大小。在我的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。
当我通过敲击键盘上的键来触发键盘事件时,我可以看到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
}