admin管理员组文章数量:1134247
I have my div with a right click popup menu:
// Attatch right click event to folder for extra options
$('#fBox' + folderID).mousedown(function(event) {
if (event.which == 3) {
// Set ID
currRClickFolder = folderID;
// Calculate position to show popup menu
var height = $('#folderRClickMenu').height();
var width = $('#folderRClickMenu').width();
leftVal = event.pageX - (width / 2) + "px";
topVal = event.pageY - (height) + "px";
$('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();
}
});
But the browser for this element still pops up the default menu (copy/paste/properties etc). Any way to disable this? I've tried return false but not luck.
I have my div with a right click popup menu:
// Attatch right click event to folder for extra options
$('#fBox' + folderID).mousedown(function(event) {
if (event.which == 3) {
// Set ID
currRClickFolder = folderID;
// Calculate position to show popup menu
var height = $('#folderRClickMenu').height();
var width = $('#folderRClickMenu').width();
leftVal = event.pageX - (width / 2) + "px";
topVal = event.pageY - (height) + "px";
$('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();
}
});
But the browser for this element still pops up the default menu (copy/paste/properties etc). Any way to disable this? I've tried return false but not luck.
Share Improve this question asked Feb 7, 2011 at 10:31 Tom GullenTom Gullen 61.7k86 gold badges291 silver badges467 bronze badges 2- 1 what is folderID, is this code under a loop or something else? or maybe you need preventDefault()? – Mohammad Ali Akbari Commented Feb 7, 2011 at 10:33
- It's in a function that creates a folder dynamically. The folder ID is a unique ID for the folder. – Tom Gullen Commented Feb 7, 2011 at 10:34
12 Answers
Reset to default 113You can disable the right click by appending oncontextmenu="return false;" to your body tag.
<body oncontextmenu="return false;">
You can disable context menu on any element you want:
$('selector').contextmenu(function() {
return false;
});
To disable context menu on the page completely (thanks to Ismail), use the following:
$(document).contextmenu(function() {
return false;
});
One jQuery line:
$('[id^="fBox"]').on("contextmenu", function(evt) {evt.preventDefault();});
Try this:
$('#fBox' + folderID).bind("contextmenu", function () {
alert("Right click not allowed");
return false;
});
Try...
$('[id^="fBox"]').mousedown(function(event) {
if (event.which == 3) {
event.preventDefault();
// Set ID
currRClickFolder = $(this).attr('id').replace('fBox','');
// Calculate position to show popup menu
var height = $('#folderRClickMenu').height();
var width = $('#folderRClickMenu').width();
leftVal = event.pageX - (width / 2) + "px";
topVal = event.pageY - (height) + "px";
$('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();
}
});
if you have any dynamic creation of these boxes then...
$('[id^="fBox"]').live('mousedown',function(event) {
...
});
I agree with @aruseni, blocking oncontextmenu at the body level you'll avoid the standard context menu on the right click for every element in the page.
But what if you want to have a finer control?
I had a similar issue and I thought I've found a good solution: why not attaching directly your context menu code to the contextmenu
event of the specific element(s) you want to deal with? Something like this:
// Attatch right click event to folder for extra options
$('#fBox' + folderID).on("contextmenu", function(event) {
// <-- here you handle your custom context menu
// Set ID
currRClickFolder = folderID;
// Calculate position to show popup menu
var height = $('#folderRClickMenu').height();
var width = $('#folderRClickMenu').width();
leftVal = event.pageX - (width / 2) + "px";
topVal = event.pageY - (height) + "px";
$('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();
event.stopImmediatePropagation();
return false; // <-- here you avoid the default context menu
});
Thus you avoid handling two different events just to capture the context menu and customize it :)
Of course this assumes you don't mind having the standard context menu displayed when someone clicks the elements you didn't select. You might as well show different context menus depending on where users right-click..
HTH
This is a default behavior of browsers now to disable the alternate-click override. Each user has to allow this behavior in recent browsers. For instance, I don't allow this behavior as I always want my default pop-up menu.
Using jQuery:
$('[id^="fBox"]').bind("contextmenu",function(e){
return false;
});
Or disable context menu on the whole page:
$(document).bind("contextmenu",function(e){
return false;
});
For me
$('body').on('contextmenu',function(){return false;});
jQuery does the job :)
// Attatch right click event to folder for extra options
$('#fBox' + folderID).mousedown(function(event) {
if (event.which == 3) {
event.preventDefault();
// Set ID
currRClickFolder = folderID;
// Calculate position to show popup menu
var height = $('#folderRClickMenu').height();
var width = $('#folderRClickMenu').width();
leftVal = event.pageX - (width / 2) + "px";
topVal = event.pageY - (height) + "px";
$('#folderRClickMenu').css({ left: leftVal, top: topVal }).show();
}
});
Here's a way I used recently (using a little jQuery too,) when I was running into a problem with it. Since the mousedown event occurs before the contextmenu, this trick seems to catch it, which is attaching a body level oncontextmenu handler to return false temporarily in the mousedown event, perform your desired action, then as an important part, remember to remove the handler afterward.
This is just part of my code extracted out, as an example...
$(div)
.mousedown(function (e) {
if (!leftButtonPressed(e)) {
disableContextMenu(true);
showOptions({ x: e.clientX, y: e.clientY }, div); // do my own thing here
}
});
When my showoptions() rtn finishes, a callback function is run and it calls the disable-rtn again, but with 'false':
disableContextMenu(false);
Here's my disableContextMenu() rtn:
function disableContextMenu(boolDisable, fn) {
if (boolDisable) {
$(document).contextmenu(function (e) {
if (fn !== undefined) {
return fn(e);
} else {
return false;
}
});
} else {
$(document).prop("oncontextmenu", null).off("contextmenu");
}
}
There’s many Javascript snippets available to disable right-click contextual menu, but JQuery makes things a lot easier:
$(document).bind("contextmenu",function(e){
return false;
});
});
本文标签: javascriptJqueryJS prevent right click menu in browsersStack Overflow
版权声明:本文标题:javascript - JqueryJS prevent right click menu in browsers - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736855027a1955675.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论