【问题标题】:How can I detect CTRL-V in JavaScript for IE and firefox如何在 IE 和 firefox 的 JavaScript 中检测 CTRL-V
【发布时间】:2014-11-10 10:43:28
【问题描述】:

我正在尝试检测用户何时在 JavaScript 中按下 Ctrl + V。

jQuery(document).on('paste', function() {alert('text pasted!')})

它适用于 Chrome (v37)。但它不适用于 Firefox (v32) 和 IE (v11),你可以试试这个 jsfiddle:

http://jsfiddle.net/7N6Xq/410/

知道我做错了什么吗?

编辑 - 2014-09-17 - 需要剪贴板内容。

我不能仅仅依赖于按键检测,因为我需要剪贴板内容,它只能通过粘贴事件获得(没有其他干净的方法可以访问它)。在这个 JSFiddle 中,我得到了事件并显示了文本(仅适用于 Chrome)

http://jsfiddle.net/7N6Xq/412/

我的最终目标是从剪贴板中获取图像并直接发送到服务器。

【问题讨论】:

标签: javascript jquery paste


【解决方案1】:

您不能只粘贴显示的文本。您必须创建一个可以粘贴的输入区域,<input><textarea> 或类似名称。它将继承 onpaste 处理程序,因此您不必直接在输入元素上设置它,但在大多数浏览器中它不会在一个之外触发。

在此处查看小提琴:http://jsfiddle.net/Lznvm8x9/

我在 Mac 上,所以我无法测试 IE,但以上在 Firefox 以及 Safari 和 Opera 中有效。

如果您想将 control-V 检测为独立于实际粘贴功能的键和弦,您可以使用 keydown/keyup 事件,但是您会遇到跨平台问题 - 您是否希望它仍然存在在 Mac 上是 control-V,其中 paste 通常是 command-V 等。

【讨论】:

    【解决方案2】:

    使用keydownkeyup + 代码代替您的实际方法。

    【讨论】:

    • 但是它不会通过事件给你粘贴的内容。应该通过在警报中显示剪贴板文本来以不同的方式表述问题。
    【解决方案3】:

    这是我的JSFIDDLE。它在 Chrom & Firefox & IE10 上运行良好 这是代码:

    $(document).keydown(function (event) {
        if (event.ctrlKey && event.keyCode == 86) {
            alert("!");
        }
    });
    

    【讨论】:

    • 但是它并没有通过事件给你粘贴的内容。应该通过在警报中显示剪贴板文本来以不同的方式表述问题。
    • @JohnRizzo Soryy,我无法关注你。你的意思是paste事件和keydown事件有区别吗?
    • 是的。出于安全原因,无法启动从 JavaScript 读取用户剪贴板的操作。我们唯一能做的就是等待用户启动粘贴事件(例如使用 Ctrl + V)并通过该事件访问剪贴板。
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 2017-07-31
    • 2011-02-26
    • 1970-01-01
    • 2016-09-27
    • 2018-09-29
    • 2014-09-27
    相关资源
    最近更新 更多