Вставить прослушиватель событий в 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')
}
}
});