我希望能够模拟来自我的firefox-addon的击键,而目前我无法做到这一点。
我发现这篇文章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 :(得分:2)
您的代码是正确的,但<textarea>
元素对keypress
个事件做出反应,而不是keydown
。
无论如何,为什么这么复杂?您只需设置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();