2016-07-19 8 views
0

Also habe ich dieses Tutorial verwendet ein eigenes Rechtsklick-Menü für einige Diagramme zu erstellen: https://www.sitepoint.com/building-custom-right-click-context-menu-javascript/Ereignis-Listener nach jeder Seite Compoundierung aktualisieren

Es ist großartig zu arbeiten, aber ich habe ein Problem mit den Zuhörern. Insbesondere wenn contextListeners und clickListeners-Funktionen aufgerufen werden, werden Ereignislistener hinzugefügt, wenn die Seite geladen wird. In meiner Anwendung habe ich jedoch eine Schaltfläche, die diese Diagramme neu zeichnet und die Seite neu lädt, an die das benutzerdefinierte Kontextmenü angeschlossen ist, und jedes Mal, wenn neue Listener erstellt werden. Als Ergebnis wird die mit dem Rechtsklick-Menü verbundene Funktion zweimal aufgerufen, wenn ich zwei verschiedene Graphen lade, und dreimal, wenn ich sie dreimal lade. Hier ist die Funktion, die aufgerufen wird immer, und hält das Hinzufügen Zuhörer

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

und in einer späteren Funktion habe ich versucht:

document.removeEventListener("contextmenu", function(e) { 
          console.log("removed"); 
         }); 

aber das scheint nicht den Trick zu tun.

+0

wo genau contextListener() ausgelöst zu werden? – otherstark

+0

sie werden alle am Anfang in einer Init-Funktion ausgelöst, wenn ich sie anrufe. – iceblender

+0

Ist die init-Funktion in einem document.ready-Aufruf? – otherstark

Antwort

0

i don`t verstehen Sie auch in Frage stellen, aber man kann versuchen, diese:

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(); 
         } 
        }); 
       } 

       } 
Verwandte Themen