2016-07-19 4 views
0

Так что я использовал этот учебник для создания пользовательского меню правой кнопки мыши для некоторых графиков: 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"); 
         }); 

, но это не похоже, чтобы сделать трюк.

+0

где именно contextListener() получение срабатывает? – otherstark

+0

они запускаются в начале в функции init, когда я их вызываю. – iceblender

+0

Является ли функция init в вызове document.ready? – otherstark

ответ

0

не понимаю, от вас вопрос хорошо, но вы можете попробовать это:

function contextListener() { 
       if(!document.handAddcontext){ 
        document.handAddcontext = true 
        document.addEventListener("contextmenu", function(e) { 
         taskItemInContext = clickInsideElement(e, taskItemClassName); 
         if (taskItemInContext) { 
          e.preventDefault(); 
          toggleMenuOn(); 
          positionMenu(e); 
         } else { 
          taskItemInContext = null; 
          toggleMenuOff(); 
         } 
        }); 
       } 

       }