我想在光标所在的位置写文本,我认为一种方法是触发键盘事件。然而,尽管我做了什么,它似乎并没有真正导致文本被写入。
setTimeout(function(){
var evt = document.createEvent('Event');
evt.initEvent('keydown', true, true);
evt.view = window;
evt.altKey = false;
evt.ctrlKey = false;
evt.shiftKey = false;
evt.metaKey = false;
evt.keyCode = 0;
evt.charCode = 113;
document.activeElement.dispatchEvent(evt);
}, 2000);
或
setTimeout(function () {
var e = new KeyboardEvent("keypress", { bubbles: true, cancelable: true, key: "Q", char: "Q", shiftKey: true });
document.activeElement.dispatchEvent(e);
}, 2000);
答案 0 :(得分:-1)
function addText(text, target = document.activeElement) {
text = text || '';
if (document.selection) { // IE
target.focus();
var sel = document.selection.createRange();
sel.text = text;
} else if (this.selectionStart || this.selectionStart === 0) { // Others
var startPos = target.selectionStart;
var endPos = target.selectionEnd;
target.value = target.value.substring(0, startPos) + text + target.value.substring(endPos, this.value.length);
target.selectionStart = startPos + text.length;
target.selectionEnd = startPos + text.length;
} else {
target.value += text;
}
};
或
const dataTransfer = new DataTransfer();
function dispatchPaste(text, target = document.activeElement) {
// this may be 'text/html' if it's required
dataTransfer.setData('text/plain', text);
target.dispatchEvent(
new ClipboardEvent('paste', {
clipboardData: dataTransfer,
// need these for the event to reach Draft paste handler
bubbles: true,
cancelable: true
})
);
// clear DataTransfer Data
dataTransfer.clearData();
}
这也有效
document.execCommand('insertText', false, 'text to enter')