是否可以通过javascript触发按键事件来输入文本?

时间:2021-05-14 01:19:18

标签: 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 = 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);

1 个答案:

答案 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')