Так что я использовал этот учебник для создания пользовательского меню правой кнопки мыши для некоторых графиков: https://www.sitepoint.com/building-custom-right-click-context-menu-javascript/слушателей событий компаундирования после каждой страницы обновления
Это работает прекрасно, но у меня есть одна проблемы с слушателями. В частности, когда вызываются функции contextListeners и clickListeners, слушатели событий добавляются , когда страница загружается. Однако в моем приложении у меня есть кнопка, которая перерисовывает эти графики и перезагружает страницу, к которой подключено настраиваемое меню щелчка правой кнопкой мыши, и каждый раз создаются новые слушатели. В результате функция, связанная с меню правой кнопки мыши, вызывается дважды, если я загружаю два разных графика и трижды, если я загружу их три раза. Вот функция, которая продолжает получать называется, и продолжает добавлять слушателей
function contextListener() {
document.addEventListener("contextmenu", function(e) {
taskItemInContext = clickInsideElement(e, taskItemClassName);
if (taskItemInContext) {
e.preventDefault();
toggleMenuOn();
positionMenu(e);
} else {
taskItemInContext = null;
toggleMenuOff();
}
});
}
и в более поздней функции я попытался:
document.removeEventListener("contextmenu", function(e) {
console.log("removed");
});
, но это не похоже, чтобы сделать трюк.
где именно contextListener() получение срабатывает? – otherstark
они запускаются в начале в функции init, когда я их вызываю. – iceblender
Является ли функция init в вызове document.ready? – otherstark