2

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 
} 
+0

我已鼠標事件的工作。所以我可以很容易地觸發點擊Facebook的處理程序然後捕獲的元素。我不能讓它適用於鍵盤事件。 – freeall

+0

您是否嘗試過使用'initKeyboardEvent'而不是initEvent? – haynar

+0

相關? http://stackoverflow.com/questions/961532/firing-a-keyboard-event-in-javascript – apsillers

回答