Facebook擁有textarea,它們展開/收縮爲其內部文本的大小。在我的Chrome擴展中,我將textarea中的文本更改爲多行。然而,textareas展開/縮小方法只適用於鍵盤事件,所以我必須觸發一個。從Chrome擴展中觸發原生鍵盤事件
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,按鍵的)
但是,這是行不通的。現在,我知道一些爲什麼它不起作用,但不知道如何解決它。我附上一個處理程序的元素,看看有什麼是要去:
$('[role=dialog] .MessagingComposerForm textarea').on('keyup', function(e) {
console.log(e);
});
當Chrome擴展觸發其keyup事件,我可以在我的控制檯中看到的對象是一個正常的事件對象,除了兩件事情:keyCode = 0和view = null。
當我通過點擊鍵盤上的鍵觸發鍵控事件時,我可以看到keyCode = 38和view = Window。
有沒有人有關於如何做到這一點的想法?
添加:
我發現了一些東西。如果我在事件被調度之前console.log,它仍然不包含正確的信息。在這裏:
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
outpus這個對象:
KeyboardEvent: {
...
charCode: 0,
keyCode: 0,
view: Window,
which: 0
}
我已鼠標事件的工作。所以我可以很容易地觸發點擊Facebook的處理程序然後捕獲的元素。我不能讓它適用於鍵盤事件。 – freeall
您是否嘗試過使用'initKeyboardEvent'而不是initEvent? – haynar
相關? http://stackoverflow.com/questions/961532/firing-a-keyboard-event-in-javascript – apsillers