【问题标题】:How to detect right mouse click + paste using JavaScript?如何使用 JavaScript 检测鼠标右键单击 + 粘贴?
【发布时间】:2009-01-14 01:51:51
【问题描述】:

有没有办法在 IE 和 Firefox 上检测右键单击然后用 JavaScript 粘贴?

更新:

我决定用 Jquery 来做:

$('#controlId').bind('paste', null, function() {
    // code
});

这不是我想要的(因为它会在“ctrl + v”以及“右键单击 + 粘贴”中触发,但我可以解决它。

在 Chrome、Firefox 3、IE 7 和 IE 6 上对其进行了测试,并且可以正常工作

【问题讨论】:

  • 恐怕。你想做什么 ?我认为依赖右键单击和粘贴存在严重的网络可用性问题。
  • 我很困惑。您的意思是“检测到右键单击然后粘贴”还是“检测到右键单击然后进行粘贴”?
  • 很抱歉。我更改了标题并添加了更多文字以使其更易于理解。
  • @Guido García:我正在使用 ajax 控件工具包自动完成扩展器,问题是当您在 IE 上使用鼠标粘贴文本时它不会自动完成(适用于 Firefox 并使用 ctrl+v适用于两者)所以我试图捕捉事件来触发自动完成。这有意义吗?

标签: javascript jquery


【解决方案1】:

我喜欢这个解决方案:

$('#txt_field').bind('input propertychange', function() {
   console.log($(this).val());
});

【讨论】:

  • 太棒了!你是怎么想到这个的?
  • 大家都知道,这会在剪切和粘贴时触发。
  • 这是很棒的解决方案
  • 我很好奇哪个绑定做了什么,但最后我只需要“输入”来捕捉键盘输入、键盘粘贴和鼠标粘贴事件。
【解决方案2】:
$('#controlId').bind('paste', null, function(e) {
    if(!e.keyCode){
       /*
          since no key was down at the time of the event we can assume it was
          from the toolbar or right click menu, and not a ctrl+v
       */
    }
});

【讨论】:

【解决方案3】:

使用 IE 你有 onpaste

使用 Mozilla,您可以查看 输入 和

elementReference.addEventListener("DOMCharacterDataModified", function(e){ foo(e);}, false);

没有简单的解决方案。

埃里克

【讨论】:

  • 您能否提供一个 IE 和 Firefox 的完整示例?谢谢你。另外,Chrome 和 Safari 呢?
【解决方案4】:

使用setTimeout(),设置小超时直到 .val() 函数可以被填充。

$(document).on('paste blur keyup', '#controlId', function(event) {
    var element = $(event.target);
    setTimeout(function() {
        var text = $(element).val();
        // do something with text
    }, 100);
});

来源:Catch paste input

【讨论】:

    【解决方案5】:

    我在 IE8 中遇到了同样的问题。 Chrome 允许我识别右键单击粘贴,但 IE8 不能。

    我能够使用 Aaron 描述的鼠标离开功能解决 JQUERY 的问题,但这里是代码:

    for IE8:
        $( "#field" ).mouseleave(function() {
                    doStuff());
                });
    
    for Chrome:
        $('#field').bind('input',function() {
                    doStuff();
                });
    

    【讨论】:

      【解决方案6】:

      我做了以下仅在 mouseup 时触发的操作:

      onmouseup="jQuery(this).on('paste',function(event){setTimeout(function(){alert('Paste detected!');},100);});"
      

      【讨论】:

        【解决方案7】:

        如果您使用的是 vue,您可以像这样发出并传递粘贴的值:

         <v-text-field 
           @input="$emit('rightclickpaste',$event)"  
         >             
         </v-text-field>
        

        【讨论】:

          【解决方案8】:

          您可以尝试的廉价黑客(有效)是:

          • jQuery 的 mouseleave 函数。

          我注意到在 IE8 中,如果您右键单击文本框然后选择“粘贴”,它会延迟“mouseleave”事件,直到粘贴完成。所以它会在粘贴后立即触发! :) 对我有用,实际上让我完全摆脱了麻烦。

          这只是一个内网应用,我没有在火狐等中测试过。

          干杯

          【讨论】:

            猜你喜欢
            • 2012-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-18
            • 1970-01-01
            • 2014-07-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多