Я согласен с @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
});
Таким образом, вы избегаете обработки двух разных событий просто для того, чтобы захватить контекстное меню и настроить его:)
Конечно, это предполагает, что вы не возражаете против отображения стандартного контекстного меню, когда кто-то щелкает элементы, которые вы не выбрали. Вы также можете отобразить различные контекстные меню в зависимости от того, где пользователи щелкнули правой кнопкой мыши.
НТН