Я показываю контекстное меню в jquery, но не могу его закрыть.
Это те события, которые я регистрирую:
function openContextMenu(event) {
event.preventDefault();
$("#custom-menu")
.css({
top: event.pageY + "px",
left: event.pageX + "px"
})
.show(100);
isContextMenuOpen = true;
}
function closeContextMenu(event) {
console.log("Click called on document");
if (isContextMenuOpen) {
$("custom-menu").hide();
console.log("Hide the context menu");
}
isContextMenuOpen = false;
}
function registerMenu() {
$(document).on({
contextmenu: function (event) {
openContextMenu(event);
},
click: function (event) {
closeContextMenu(event);
}
});
}
Я считаю, что у вас просто опечатка:
$("custom-menu")
в closeContextMenu
должно иметь идентификатор ID:
$("#custom-menu").hide();
Кроме того, если isContextMenuOpen
объявлен глобально, он останется openContextMenu
в openContextMenu
, поэтому метод hide
никогда не будет выполняться. Вы все равно не нуждаетесь в этом, так как hide
будет работать, будет ли элемент виден или нет.
Попробуйте это вместо этого:
function closeContextMenu(event) {
$("#custom-menu").hide();
console.log("Hide the context menu");
}
Кроме того, просто для того, чтобы подключить мой собственный ответ, для некоторой довольно сложной обработки контекстного меню, посмотрите на это: