正如已经回答的那样,不可能在浏览器中使用上下文菜单,实际上,使用.bind('copy', func....)
不仅会收听contextmenu的副本,还会收到CTRL+c
,因为它实际上会绑定到剪贴板。
我已经把一个插件,它说实话是一个黑客位的,但它可以让你捕捉:
上下文复制,剪切,粘贴,删除 - ONLY
上下文复制,剪切,粘贴,删除 - 和 - 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);
一个例子使用,文本菜单删除+上下文复制ONLY:
$('#evalname').contextDelete({
contextDelete: function(e) {
alert('You just deleted something!');
},
copy: function(e) {
alert('You just copied something!');
},
contextOnly: true,
});
Click Here for a DEMO
问得好:) +1 – abuduba 2012-01-04 14:57:11
不知道我understans你的问题,你是什么意思与“删除”?按钮上的选定文本的上下文菜单选项?使用'change event'并不足以使用null和空字符串比较值吗? – Stefan 2012-01-04 16:03:36