是否可以通过javascript触发按键事件来键入文本?
我想在光标所在的位置写入文本,我想一种方法是触发键盘事件。然而,不管我怎么做,它似乎并没有真正导致文本被编写是否可以通过javascript触发按键事件来键入文本?,javascript,Javascript,我想在光标所在的位置写入文本,我想一种方法是触发键盘事件。然而,不管我怎么做,它似乎并没有真正导致文本被编写 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
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);
或
或
这同样有效
document.execCommand('insertText', false, 'text to enter')
您可以编辑表单的文本值,对吗?否则,这不是不安全吗?就像它可以控制键盘一样?我不能编辑值,我需要能够通过js
evt键入。charCode
应该是一个整数,而不是一个字符串。你将如何触发它…你可以自动触发键盘事件,但必须从存在的节点调度。更好的解决方案是只使用函数(与侦听器上使用的函数相同)并在需要时调用它,除非需要专门使用事件对象。
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')