6

我从Javascript 中的 Intercept paste 事件中获得了以下代码。

我需要在粘贴之前获取它,否则我会丢失需要保存的“\n”字符。

它可以很好地拦截具有 id 的一个元素的剪贴板数据。我需要它来处理所有输入元素。当我尝试使用 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.
    };
}
4

2 回答 2

13

只需在文档中添加一个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;
});

小提琴

于 2014-07-02T21:03:35.023 回答
3

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;
    }
});

此外,您可能应该只将事件侦听器添加到元素,而不是整个文档。

于 2016-07-22T04:29:44.197 回答