正如已經回答的那樣,不可能在瀏覽器中使用上下文菜單,實際上,使用.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