Перехватывать Вставить данные в JavaScript

Я получил следующий код из события вставки Intercept в Javascript.

Мне нужно получить его до того, как оно будет вставлено, иначе я потеряю символы "\n", которые нужно сохранить.

Это прекрасно работает для перехвата данных буфера обмена для одного элемента с идентификатором. Мне нужно, чтобы он работал на всех элементах ввода. Когда я пытаюсь использовать jQuery, чтобы получить элементы ввода ничего.

Любая помощь приветствуется.

var paster = function () {
    var myElement = document.getElementByTagName('pasteElement');
    myElement.onpaste = function(e) {
        var pastedText = undefined;
        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');
        }
        processExcel(pastedText); // Process and handle text...
        return false; // Prevent the default handler from running.
    };
}

2 ответа

Решение

Просто добавьте paste слушатель события документа.

document.addEventListener("paste", function (e) {
    console.log(e.target.id);
    var pastedText = undefined;
    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');
    }
    e.preventDefault();
    e.target.value = "You just pasted '" + pastedText + "'";
    return false;
});

играть на скрипке

Что сказал nmaier, но вы также должны проверить исходное событие.

document.addEventListener("paste", function (e) {
    console.log(e.target.id);
    var pastedText = undefined;
    if (window.clipboardData && window.clipboardData.getData) { // IE
        pastedText = window.clipboardData.getData('Text');
    } else {
        var clipboardData = (e.originalEvent || e).clipboardData;
        if (clipboardData && clipboardData.getData) {
            pastedText = clipboardData.getData('text/plain');
        }
        e.preventDefault();
        e.target.value = "You just pasted '" + pastedText + "'";
        return false;
    }
});

Кроме того, вам, вероятно, следует добавить прослушиватель событий только к элементу, а не ко всему документу.

Другие вопросы по тегам