input的粘貼事件

直接操作DOM的話比較簡單,還有一種特殊情況:shadow dom的粘貼事件
就需要先拿到真實DOM: 使用定時器setTimeout()去獲取就可以了

input.addEventListener('paste', event => {
  event.preventDefault();
  let pasteValue=(event.clipboardData || window.clipboardData).getData('text');
  
  document.execCommand('insertText', false, pasteValue);//火狐瀏覽器
  // document.getSelection().createRange().pasteHTML(pasteValue);//谷歌瀏覽器
  // window.getSelection().getRangeAt(0).insertNode(pasteValue);//火狐瀏覽器

});

除了上面的光標插入文本,還有另外一種方法,就是直接修改input的值(e.target.value)
注意:粘貼過程中可能會有覆蓋粘貼,可以使用selection去處理,我這裏使用的是input光標位置來獲取被覆蓋的內容

//第一種
const selection = window.getSelection();
    if (!selection.rangeCount) return false;
    selection.deleteFromDocument();
    selection.getRangeAt(0).insertNode(document.createTextNode(paste));
//第二種
inputValue = e.target.value;//獲取input值,用來處理覆蓋粘貼
e.target.value = 
            inputValue.slice(0,input.selectionStart) +
            pasteValue +
            inputValue.slice(input.selectionEnd, inputValue.length);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章