Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测鼠标右键单击+;使用Jquery/Javascript删除_Javascript_Jquery - Fatal编程技术网

如何检测鼠标右键单击+;使用Jquery/Javascript删除

如何检测鼠标右键单击+;使用Jquery/Javascript删除,javascript,jquery,Javascript,Jquery,我想在html文本输入上跟踪鼠标右键单击+删除事件。我成功地映射了鼠标右键单击+粘贴/剪切/复制,如下所示 $("#evalname").bind('paste/cut/copy', function(e) { do something }); 这里的“evalname”是我的html文本输入的id。我试着 $("#evalname").bind('delete', function(e

我想在html文本输入上跟踪鼠标右键单击+删除事件。我成功地映射了鼠标右键单击+粘贴/剪切/复制,如下所示

          $("#evalname").bind('paste/cut/copy', function(e)
          {
             do something

          });
这里的“evalname”是我的html文本输入的id。我试着

          $("#evalname").bind('delete', function(e)
          {
             do something

          });

但不起作用。有没有办法在Jquery/Javascript中映射鼠标右键单击+删除事件?

到今天为止,我不相信浏览器已经实现了它

复制、粘贴和剪切事件已添加为与粘贴板交互的功能,并且由于删除不是粘贴板的一部分,因此尚未实现

浏览器支持表(2011/04)

WebKit文档

Firefox文档

要详细介绍Stefan的评论和UberNeet的回答:

您无法从关联菜单中检测到“删除”选项

您可以在keyup(捕捉删除键)或change或blur(检测是否清空字段并单击其他位置)检测输入内容的更改

如果你想知道它被清空的时刻,即使他们没有离开该字段,那么你可以尝试设置一个计时器,每半秒轮询一次,并检查字段是否为空。注意不要使用太紧的计时器,以免让可怜的用户的浏览器工作过度


这些都不是理想的解决方案,但这就是在浏览器中工作的乐趣

如前所述,无法在浏览器上拾取正在使用的contextmenu delete,事实上,使用
。bind('copy',func…)
不仅会侦听contextmenu的副本,而且还会侦听
CTRL+c
,因为它实际上是绑定到剪贴板的

我已经准备好了一个插件,老实说这有点像黑客,但它可以让你捕捉到:

  • 上下文复制、剪切、粘贴、删除-仅限
  • 上下文复制、剪切、粘贴、删除--CTRL+c、CTRL+x、CTRL+v
  • 或仅以上述任一方式提供一项、两项、三项或四项。当然,一个问题是IE,它不会触发jQuerys
    .bind('input',func…
    )来侦听更改,所以我需要为IE触发它,因此可能会有不同的小延迟(毫秒)

    插件:

    (function($) {
        $.fn.contextDelete = function(options) {
            var set = {
                'obj': $(this),
                'menu': false,
                'paste': false,
                'cut': false,
                'copy': false,
                'set': '',
                'ie': null,
            };
            var opts = $.extend({
                'contextDelete': function() {},
                'paste': function() {},
                'cut': function() {},
                'copy': function() {},
                'contextOnly': false,
            }, options);
    
            $(window).bind({
                click: function() {
                    set.menu = false;
                },
                keyup: function() {
                    set.menu = false;
                }
            });
    
            set.obj.bind({
                contextmenu: function() {
                    set.menu = true;
                    set.paste = false;
                    set.cut = false;
                    set.copy = false;
                    set.val = set.obj.val();
    
                    // Hack for IE:
                    if ($.browser.msie) {
                        set.ie = setInterval(function() {
                            set.obj.trigger($.Event('input'));
                            if (!set.menu) {
                                clearInterval(set.ie);
                            }
                        }, 300);
                    }
                    // End IE Hack
                },
                paste: function(e) {
                    set.paste = true;
                    if (opts.contextOnly) {
                        if (set.menu) {
                            opts.paste(e);
                            set.menu = false;
                        }
                    }
                    else {
                        opts.paste(e);
                    }
                },
                cut: function(e) {
                    set.cut = true;
                    if (opts.contextOnly) {
                        if (set.menu) {
                            opts.cut(e);
                            set.menu = false;
                        }
                    }
                    else {
                        opts.cut(e);
                    }
                },
                copy: function(e) {
                    set.copy = true;
                    if (opts.contextOnly) {
                        if (set.menu) {
                            opts.copy(e);
                            set.menu = false;
                        }
                    }
                    else {
                        opts.copy(e);
                    }
                },
                input: function(e) {
                    if (set.menu && (!set.paste) && (!set.cut) && (!set.copy)) {
                        if (set.obj.val().length < set.val.length) {
                            opts.contextDelete(e);
                            set.menu = false;
                        }
                    }
                }
            });
        };
    })(jQuery);
    

    在特定的时间间隔后,尝试检查“evalname”字段的值。使用它,我们可以检测上下文菜单的剪切/复制/粘贴/删除

     var evalnameLength=$("#evalname").val().length;
        var enableSave;
            enableSave=setInterval(function(){
                if(evalnameLength!=$("#evalname").val().length){
                    do something;
                    clearInterval(enableSave);
                }
            },500);
    

    我不太明白你的问题,你说的“删除”是什么意思?按钮在选定文本上显示上下文菜单选项?使用
    更改事件
    并将值与空/空字符串进行比较是否足够?第二个示例不适用于Xubuntu上的Firefox 25.0.1。我刚刚在Windows 7上的Firefox 47上进行了测试,它适用于我。
     var evalnameLength=$("#evalname").val().length;
        var enableSave;
            enableSave=setInterval(function(){
                if(evalnameLength!=$("#evalname").val().length){
                    do something;
                    clearInterval(enableSave);
                }
            },500);