2012-05-10 24 views
4

擊鍵我希望能夠從我的Firefox,插件,並在目前,我不能夠做到這一點模擬按鍵。模擬在Firefox插件

我發現這個職位Why simulation of Left Arrow + Shift keys doesnt work in Firefox?和我的代碼幾乎是相同的,但它只做焦點一部分,而不是dispatchEvent。任何想法,爲什麼會發生這種情況?

下面是代碼:

objTag.focus(); 
var e = document.createEvent('KeyboardEvent'); 
e.initKeyEvent('keydown', true, true, window, false, false, false, false, 35, 0); 
objTag.dispatchEvent(e); 
+0

您是否正確發送了' keydown'事件(結束鍵)給某個元素。也許你應該解釋一下你期望看到的效果?另外,如果'objTag'確實是一個對象(意爲Flash或類似這樣的東西) - 插件有自己的事件處理獨立於瀏覽器,他們將不會收到瀏覽器生成的事件。 –

+0

我的加載項將在textarea的末尾添加一些額外的文本。我想模擬END鍵,然後是空格鍵。 objtag是textarea元素。它正在關注焦點,但它並沒有走到線的盡頭。 –

回答

2

你的代碼是正確的,但<textarea>元素反應keypress事件,不​​。

不管怎樣,爲什麼這麼複雜?您可以設置input.value,然後使用input.setSelectionRange() method來適當地移動光標。如果你想要的東西添加到當前行的末尾,你會做這樣的:

var position = objTag.selectionStart; 
var lineEnd = objTag.value.indexOf("\n", position); 
if (lineEnd < 0) // No more line breaks 
    lineEnd = objTag.value.length; 

var textToAdd = "foo"; 
objTag.value = objTag.value.substr(0, lineEnd) + textToAdd + objTag.value.substr(lineEnd); 
objTag.setSelectionRange(lineEnd + textToAdd.length, lineEnd + textToAdd.length); 
objTag.focus(); 

添加到文本的到底是更簡單:

var textToAdd = "foo"; 
objTag.value += textToAdd; 
objTag.setSelectionRange(objTag.value.length, objTag.value.length); 
objTag.focus(); 
+0

嗨。感謝您的迴應。我試過這個,但它並沒有做到我想要的。也許我可以更好地解釋自己。我會多一點信息 –

+0

其實,「按鍵」的一部分,在這樣做的擊鍵行之有效更新的問題,但它仍然沒有解決我的問題,因爲它不具有確切的療效,我得到當我按下鍵盤上的相同鍵。該網站有一個輸入元素,當我按下空格,退格鍵,結束等時觸發自動完成列表,但我無法用此解決方案複製該行爲。 –

+0

@fsilva:那麼你可能想送'keydown','keypress'和'keyup'每個鍵 - 這是正確模擬用戶輸入的方式。 –