Ответ 1
Вы можете отключить правый щелчок, добавив oncontextmenu = "return false;" к тегу вашего тела.
<body oncontextmenu="return false;">
У меня есть div с всплывающим меню с правом щелчка:
// 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();
}
});
Но браузер этого элемента по-прежнему выводит меню по умолчанию (копирование/вставка/свойства и т.д.). Любой способ отключить это? Я попытался вернуть false, но не удачу.
Вы можете отключить правый щелчок, добавив oncontextmenu = "return false;" к тегу вашего тела.
<body oncontextmenu="return false;">
Вы можете отключить контекстное меню для любого элемента, который вы хотите:
$('selector').contextmenu(function() {
return false;
});
Чтобы полностью отключить контекстное меню на странице (спасибо Ismail), используйте следующее:
$(document).contextmenu(function() {
return false;
});
Одна строка jQuery:
$('[id^="fBox"]').on("contextmenu", function(evt) {evt.preventDefault();});
Попробуйте следующее:
$('#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();
}
});
если у вас есть динамическое создание этих полей, тогда...
$('[id^="fBox"]').live('mousedown',function(event) {
...
});
Это поведение браузеров по умолчанию теперь отключает переопределение альтернативного щелчка. Каждый пользователь должен разрешить это поведение в последних браузерах. Например, я не допускаю такого поведения, поскольку мне всегда нужно всплывающее меню по умолчанию.
Использование jQuery:
$('[id^="fBox"]').bind("contextmenu",function(e){
return false;
});
Или отключить контекстное меню на всей странице:
$(document).bind("contextmenu",function(e){
return false;
});
Я согласен с @aruseni, блокируя oncontextmenu на уровне тела, вы избежите стандартного контекстного меню по правому клику для каждого элемента на странице.
Но что, если вы хотите иметь более тонкий контроль?
У меня была аналогичная проблема, и я подумал, что нашел хорошее решение: почему бы не привязать непосредственно код контекстного меню к событию contextmenu
конкретного элемента (ов), с которым вы хотите иметь дело? Что-то вроде этого:
// 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
});
Таким образом, вы избегаете обработки двух разных событий только для того, чтобы захватить контекстное меню и настроить его:)
Конечно, это предполагает, что вы не возражаете, если отображается стандартное контекстное меню, когда кто-то нажимает на элементы, которые вы не выбрали. Вы можете также показать различные контекстные меню в зависимости от того, где пользователи щелкнули правой кнопкой мыши.
НТН
// 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();
}
});
Для меня
$('body').on('contextmenu',function(){return false;});
jQuery выполняет задание:)