Вставить прослушиватель событий в Internet Explorer с неправильными аргументами

Я обрабатываю события вставки для contenteditable, чтобы очистить все маркеры HTML до вставки. Все работает отлично в Firefox и Chrome. Но когда я тестирую свой код в IE11, передаваемый event object не является ClipboardEvent, а a DragEvent.

Что-то не так с моим кодом? Если я добавлю слушателя в качестве кода ниже, должен ли я получить событие буфера обмена. Почему я перетаскиваю?

editable.addEventListener('paste', pasteHandler, false);

http://jsfiddle.net/vepo/4t2ofv8n/

Чтобы проверить пример выше, я скопирую текст из Chrome и вставляю в IE. Но я копирую любой текст из IE, получаю ту же ошибку.

Ответ 1

ИЗМЕНИТЬ

$(document).ready(function(){
    var editable = document.getElementById('editable-div');
    var pasteHandler = function(e){
        if(e.clipboardData && e.clipboardData.getData) {
            var pastedText = "";
            if (window.clipboardData && window.clipboardData.getData) { // IE
                pastedText = window.clipboardData.getData('Text');
            } else if (e.clipboardData && e.clipboardData.getData) {
                pastedText = e.clipboardData.getData('text/plain');
            }

            alert(pastedText);
        }
        else{
            alert('Not paste object!');
        }
    };
    editable.addEventListener('paste', pasteHandler, false);
});

здесь я обрабатываю версию IE и другие браузеры.

JSFiddle

Ответ 2

e.clipboardData всегда был для меня недействительным, поэтому я придумал следующее:

var pastedText = '';
if (typeof e.clipboardData === 'undefined')
    pastedText = window.clipboardData.getData('Text')
else
    pastedText = e.clipboardData.getData('text/plain')

Ответ 3

e.originalEvent.clipboardData.getData('text/plain') работает на Safari, Chrome, Firefox, Safari и Chrome на Ipad.

window.clipboardData.getData('text') работает для Internet Explorer и Edge.

Примечание. e.originalEvent.clipboardData.getData('text') работает для браузеров настольных компьютеров, но не для мобильных браузеров.

Итак, в конце концов, я использовал это

var clipText;
  if (e.originalEvent.clipboardData !== undefined){
    clipText = e.originalEvent.clipboardData.getData('text/plain')
  } else {
    clipText = window.clipboardData.getData('text')
  }

Ответ 4

$("element").on('paste', function (e)
{
if (window.clipboardData) 
{
pastedText = window.clipboardData.getData('Text')
}
else if (e.clipboardData || e.originalEvent.clipboardData != undefined)
{
pastedText = e.originalEvent.clipboardData.getData('text/plain')
}
}
});