我想跟踪右键单击删除事件在html文本输入。我成功映射右鼠标点击粘贴/剪切/复制如下
$("#evalname").bind('paste/cut/copy',function(e) { do something });
这里’evalname’是我的html文本输入的id。我试过
$("#evalname").bind('delete',function(e) { do something });
解决方法
如已经回答的那样,不可能在浏览器上使用上下文菜单删除,实际上使用.bind(‘copy’,func ….)不仅可以听取上下文菜单的副本,还可以CTRL c因为它实际上绑定到剪贴板。
我已经放置了一个插件,这是一个老实说是一个黑客,但它会让你抓住:
>上下文COPY,CUT,PASTE,DELETE – 仅
>上下文COPY,CUT,PASTE,DELETE – AND – 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').contextDelete({ contextDelete: function(e) { alert('You just deleted something!'); },copy: function(e) { alert('You just copied something!'); },contextOnly: true,});