2013-04-19 3 views
10

Próbuję powiązać punkty danych ze zdarzeniem onclick, dzięki czemu mogę wyświetlić pole nakładki z dodatkowymi szczegółami i łączami. Używam klasy .nv-point, aby uzyskać dostęp do punktów danych. Problem polega na tym, że nie jestem w stanie zarejestrować zdarzenia onclick w tych punktach danych.nvd3.js: nie można powiązać zdarzenia onClick z punktami danych w svg

Oto kod:

d3.selectAll(".nv-point").on("click",function(){ 
    alert("clicked"); 
    //do something more 
}); 

Oto demo jsFiddle

Odpowiedz

4

Działka linia jest wykonana z liniami SVG, które mają klasę NV-linię. Widelec z oryginalnego jsFiddle jest tutaj: http://jsfiddle.net/pnavarrc/qzwkn/1/

d3.selectAll(".nv-line").on("click", function() { 
    alert("clicked"); 
}); 

Jeśli masz ochotę spojrzeć na kodzie źródłowym nvd3:

+0

to działa! ale nie chcę dodawać onclick do całej linii. tylko punkty danych. –

+1

Rozumiem. Punkty danych są reprezentowane jako elementy circle.nv-point, ale nie można do nich dotrzeć za pomocą myszy, ponieważ linie są rysowane nad okręgami, co uniemożliwia ich kliknięcie. Co próbujesz zrobić? –

+1

oh! co próbuję zrobić, to wyświetlić pole nakładki z kilkoma dodatkowymi szczegółami i linkami po kliknięciu punktu danych. –

8

Można można łatwo dołączyć moduł obsługi kliknięcia do "okręgu" lub punktu węzła na linii "Tak":

chart.lines.dispatch.on('elementClick', function(e) { 
    alert("You've clicked on " + e.series.key + " - " + e.point.x); 
}); 

W powyższym przykładzie pokaże się klucz (linii) i dokładna wartość x węzła, który kliknąłeś. Bardzo pomocne jest ustawienie punktu przerwania w linii alertu i używanie narzędzi dla programistów Chrome/FF/etc, sprawdzenie obiektu e, aby zobaczyć dokładnie, jakie dane są dostępne i jak uzyskać do niego dostęp.

5

Po wielu futzing wokół, to wydaje się działać dla mnie:

d3.select("#mainGraph svg").selectAll(".nv-point").style("pointer-events", "all").on("click", function(e) { console.log(JSON.stringify(e)); }); 

Zasadniczo różnica między tym, co robiłem i co początkowo stara się tylko resetowanie przesłanianie stylów, aby włączyć wskaźnik-events , tzn. styl ("wskaźnik zdarzenia", "wszystkie"). "

+0

To działało dla mnie, ale nie ma sposobu, aby skonfigurować to zachowanie "zdarzenia pointeru"? Ponieważ nv.3d otrzymuje punkt następującej klasy i stylu: .nv-noninteractive { pointer-events: none; } – edrian

2

Można dodać argument, który połączy go z punktem danych. W moim przypadku próbowałem utworzyć hiperłącze dla każdego punktu danych. Argumenty mają wartość przekazaną, która może służyć do aktualizacji hiperłącza zgodnie z wymaganiem.

d3.selectAll(".nv-point").on("click", function (e) {  

alert(e[0].values[0]); 
}); 
Powiązane problemy