• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

ChartJs - klikalny label

Object Storage Arubacloud
+2 głosów
140 wizyt
pytanie zadane 17 lutego 2021 w JavaScript przez Sebastian Szyja Bywalec (2,810 p.)
edycja 18 lutego 2021 przez Sebastian Szyja

Witajcie :)

Napotkałem mały problem :( Mam taki wykres:

I potrzebuję żeby po kliknięciu w "nr boczny 001" pokazał się alert "nr boczny 001" i tak z każdym. Zrobiłem, że gdy klika się w pasek np. czerwony albo niebieski to pokazuje mi jaka jest to etykieta ale niestety zależy mi na tym, aby po kliknieciu w label uzyskać taką informację :((

Pomożecie?

Oto kodzik:

var ajax = new XMLHttpRequest();
        ajax.open("GET", "include/get/getStatistics.php", true);
        ajax.send();
        ajax.onreadystatechange = function () {
            if (this.readyState == 4 && this.status == 200) {
                var data = JSON.parse(this.responseText);
                var barChart = document.getElementById('barChart1').getContext('2d');
                var myBarChart = new Chart(barChart, {
                    type: 'horizontalBar',
                    data: {
                        labels: data.forklift_numerBoczny,
                        datasets : [{
                            label: "Wykorzystane mth",
                            backgroundColor: 'rgb(23, 125, 255)',
                            borderColor: 'rgb(23, 125, 255)',
                            data: data.forklift_wartosc,
                        },{
                            label: "Limit miesięczny",
                            backgroundColor: 'rgb(228, 4, 4)',
                            borderColor: 'rgb(228, 4, 4)',
                            data: data.forklift_annualLimitOfEngineHours,
                        }],
                    },
                    options: {
                        responsive: true, 
                        maintainAspectRatio: false,
                        onClick: function (e) {
                        var activePointLabel = this.getElementsAtEvent(e)[0]._model.label;
                        alert(activePointLabel);
                    },
                        scales: {
                            yAxes: [{
                                ticks: {
                                    beginAtZero:true
                                }
                            }]
                        },
                        legend: {
                            display: false
                         },
                        tooltips: {
                             enabled: true,
                            showAllTooltips: true,
                        }
                    }
                });
                }
            }

 

komentarz 17 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)

Czy po kliknięciu w label metoda onClick z 27 linii jest wołana? Jeśli tak, to jaka wartość jest w zmiennej activePointLabel?

komentarz 17 lutego 2021 przez Sebastian Szyja Bywalec (2,810 p.)

Wartość w zmiennej activePointLabel jeżeli kliknę na pasek niebieski/czerwony przy nr boczny 1 to nr boczny 1

komentarz 17 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)
A jaka tam jest wartość, gdy klikniesz w labelkę?
komentarz 17 lutego 2021 przez Sebastian Szyja Bywalec (2,810 p.)

Mam takie coś :)

komentarz 17 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)

Ale ja pytam co się dzieje w funkcji, a nie w UI. :)

Zamień linijki 28 i 29 ze swojego skryptu na poniższe:

console.log('e:', e, ' /this.getElementsAtEvent(e):', this.getElementsAtEvent(e));

var activePointLabel = this.getElementsAtEvent(e)[0]._model.label;

console.log('activePointLabel:', activePointLabel);
alert(activePointLabel);

i sprawdź co pokazuje konsola przeglądarki, gdy klikniesz w labelkę po lewej stronie słupków na wykresie (np. na napis "nr boczny 001")? Ewentualnie: czy są tam jakieś błędy?

1
komentarz 17 lutego 2021 przez Sebastian Szyja Bywalec (2,810 p.)
edycja 17 lutego 2021 przez Sebastian Szyja

Błąd :((

1 odpowiedź

+1 głos
odpowiedź 17 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 22 lutego 2021 przez Sebastian Szyja
 
Najlepsza

Błąd z konsoli świadczy o tym, że funkcja do obsługi kliku jest wołana, ale metoda getElementsAtEvent zwraca pustą tablicę (nie ma nic pod zerowym indeksem), więc próba odczytu property _model.label rzuca błędem.

Testując demo z dokumentacji zauważyłem, że w prototype this wewnątrz onClick jest metoda getElementsAtXAxis, która zwraca dane dla klikniętego słupka na osi (może Ci to wystarczy), ale nie widzę analogicznej dla osi Y.

Można próbować ratować się samodzielnie namierzając słupek relatywnie do klikniętego obszaru. Property this.scale zwraca obiekt z osiami wykresu x-axis-0 oraz y-axis-0 (przynajmniej dla wykresu dwu osiowego). Tam można odczytać lokalizację oraz wymiary osi (X lub Y) i porównać je ze współrzędnymi dostępnymi z eventu, który przyszedł jako argument do onClick.

Podobne pytania

0 głosów
1 odpowiedź 71 wizyt
pytanie zadane 15 sierpnia 2023 w JavaScript przez warzywko13 Użytkownik (840 p.)
0 głosów
1 odpowiedź 298 wizyt
pytanie zadane 7 kwietnia 2020 w C i C++ przez Robot 12 Początkujący (340 p.)
0 głosów
0 odpowiedzi 393 wizyt
pytanie zadane 29 listopada 2020 w C i C++ przez jakis111 Nowicjusz (210 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...