2016-04-04 17 views
1

Ich füge nur Bootstrap und jquery zu meinem d3-Skript hinzu. Es funktioniert meistens, aber ich merke, dass ich keine Rechtsklick-/Kontextmenüs mehr bekomme. Mein Setup-Code sieht wie folgt aus:d3 contextmenu nicht feuernd

this.svg_canvas = d3.select("#" + this.container_id) 
    .append("svg") 
    .attr("width", this.width) 
    .attr("height", this.height) 
    .on("click", this._selectNodes.bind(this)) 
    .on("mousedown", this._handleMouseDown.bind(this)) 
    .on("contextmenu", function(data, index) { graph_view._showContextMenu(data, index); }) 
    .call(this.zoom_behavior.bind(this)) 
; 

Es ist erwähnenswert, dass alle anderen Gesten - klicken, mousedown- und Zoom - erscheinen nur einwandfrei zu funktionieren.

Irgendwelche Ideen, wo Sie suchen oder wie Sie dies debuggen?

+0

Nur eine wilde Vermutung; ist es möglich, dass dein "mousedown" -Code verhindert, dass das standardmäßige 'contextmenu'-Ereignis ausgelöst wird? – JSBob

+1

Doh. Ich wurde von falschen Debugging-Anweisungen getäuscht: 'mousedown' und' contextmenu' Ereignisse feuern ganz gut. Fehlerhaftes css verhinderte die Anzeige des Kontextmenüs. Move along, nichts zu sehen hier ... –

Antwort

0

Ich fürchte, das ist nicht wirklich eine Antwort, aber da jemand die Frage upvoted, ich schulde es ihnen, ihnen zu sagen, was ich gefunden ...

Ich habe Debugging-Anweisungen in meinem .on ('contextmenu') Verfahren, wie in:

var svg_canvas = d3.select('#canvas-id') 
    .append('svg') 
    ... 
    .on('contextmenu', function(d) { 
     console.log('>>> contextmenu', d); 
     handleContextMenu(d); 
    }) 
    .call(zoomBehavior) 
; 

... und ich bemerkte, dass es war ruft meinen handleContextMenu(), aber mein Menü wurde nicht angezeigt. Es dauerte eine Weile, bis ich merkte, dass ich das HTML, das das Menü erzeugte, auskommentiert hatte, aber danach war die Fehlerbehebung einfach.

Was ich immer noch verwirrt ist, dass d3 nicht einen Fehler auf dieser Linie aufwarf:

var context_menu = d3.select('#context-menu') 
    .on('mouseup', ...) 

... obwohl es keine # Kontextmenü-ID in dem DOM war.

+0

Sie haben im Grunde geschrieben - für das Element, das mit der Auswahl übereinstimmt, führen Sie die on-Methode aus. Keine Übereinstimmung ist kein Fehler, nur eine Nicht-Operation. –