我想在html文本输入上跟踪右键单击+删除事件。我成功映射右鼠标单击+粘贴/剪切/复制如下
$("#evalname").bind('paste/cut/copy', function(e)
{
do something
});
这里'evalname'是我的html文本输入的id。我试过像
$("#evalname").bind('delete', function(e)
{
do something
});
但没有工作。有没有办法在Jquery / Javascript中映射右鼠标单击+删除事件?
答案 0 :(得分:7)
正如已经回答的那样,无法接受浏览器上下文菜单删除正在使用,事实上,使用.bind('copy', func....)
不仅会监听上下文菜单的副本,还会监听CTRL+c
,因为它是实际上绑定到剪贴板。
我已经整理了一个插件,老实说这有点像黑客,但它会让你抓住:
或者只是上述两种方式中的一,二,三或四项( s )。当然一个问题是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);
一个示例用法,contextmenu delete + context copy ONLY :
$('#evalname').contextDelete({
contextDelete: function(e) {
alert('You just deleted something!');
},
copy: function(e) {
alert('You just copied something!');
},
contextOnly: true,
});
答案 1 :(得分:2)
扩展Stefan的评论,以及UberNeet的回答:
您无法从上下文菜单中检测到“删除”选项。
您可以检测输入内容的更改,无论是在keyup(将捕获删除键)还是更改或模糊(这将检测他们是否清空该字段并单击某处其他人)。
如果你想知道它被清空的那一刻,即使它们没有离开场地,那么你可以尝试设置一个计时器每半秒轮询一次,并检查该字段是否为空。小心使用太紧的计时器,以免过度使用不良用户的浏览器。
这些都不是理想的解决方案,但这是在浏览器内部工作的乐趣!
答案 2 :(得分:1)
截至今天,我认为浏览器并没有实现它。
复制,粘贴和剪切的事件已添加为与粘贴板交互的功能,并且由于删除不是粘贴板的一部分,因此尚未实现。
浏览器支持表(2011/04) http://codebits.glennjones.net/editing/setclipboarddata.htm
Firefox文档 https://developer.mozilla.org/en/DOM/element#Event_Handlers
答案 3 :(得分:0)
尝试检查&#39; evalname&#39;的值特定时间间隔后的字段。使用此功能,我们可以检测上下文菜单的剪切/复制/粘贴/删除
var evalnameLength=$("#evalname").val().length;
var enableSave;
enableSave=setInterval(function(){
if(evalnameLength!=$("#evalname").val().length){
do something;
clearInterval(enableSave);
}
},500);