Я создаю веб-приложение, в котором вы выбираете авиакомпании и получаете гистограмму с оценками в пяти категориях (компания, еда, багаж, пунктуальность, персонал). Я хочу получить значение для названия компании и категории, когда пользователь щелкает разные части диаграммы. Это необходимо для дальнейших действий в Python, используя значения для названия компании и категории.
Например, на изображении ниже, когда пользователь нажимает большую зеленую полосу (четвертая полоса справа), я хочу my JS, чтобы получить company="Air France", category="punctuality"
. Я предполагаю, что мне нужно что-то сделать с onclick
, но я не могу понять ...
![enter image description here](https://i.stack.imgur.com/RBQZ0.png)
Контекст: на основе компаний, которые вы выбрали в форме box, бэкэнд Python возвращает данные json в JS. В JS addGroupBarChart
dr aws диаграмма с использованием Chart. js и встраивается в элемент холста в html.
Это отрывок из JavaScript
document.getElementById('button').onclick = function(){
/* returns the companies value chosen from the dropdown */
/* and draw a chart using addGroupBarChart function */
let companies = $("#companies").val();
let headers = new Headers()
let init = {
method : 'GET',
headers : headers
}
let params = {
'companies':companies
}
let url = getWebAppBackendUrl('/get_stats')+'/'+JSON.stringify(params)
let promise = fetch(url, init)
.then(function(response){
response.json()
.then(function(data){
addGroupBarChart(data.barChartGroup.company,
data.barChartGroup.labels);
})
});
}
document.getElementById("bar-chart-group").onclick = function(......) {
/* returns the company and category chosen from the chart */
/* this is the function I don't know how to build */
let activePoints = // here I assume I need getPointsAtEvent(evt) but not sure...
let company = // company value based on the click on the chart
let category = // category value based on the click on the chart
let headers = new Headers()
let init = {
method : 'GET',
headers : headers
}
let params = {
'company':company,
'category':category
}
let url = getWebAppBackendUrl('/get_table')+'/'+JSON.stringify(params)
let promise = fetch(url, init)
.then(function(response) {
response.json()
.then(function(data){
// function to add table
})
});
}
function addGroupBarChart(data, labels) {
/* function to add a bar chart using the data returned from Python backend */
document.getElementById('bar-card').innerHTML = '<canvas id="bar-chart-group" chart-click="onClick"></canvas>';
i = 1
arr = []
data.forEach(function(d){
company = Object.keys(d);
values = d[company]['data'];
dataset_company = {
label:company,
backgroundColor: default_colors[i],
data:values};
console.log("dataset_company", dataset_company);
arr.push(dataset_company);
i+=1;
})
let data_grouped = {
labels: labels,
datasets: arr
};
new Chart(document.getElementById("bar-chart-group"), {
type: "bar",
data: data_grouped,
options: {
title: {
display: false,
text: "Sentiment by category"
}
}
});
}
data
и labels
аргументов, которые go в addGroupBarChart
выглядят как
data = [{"Air France":{"data":[0.1, -0.2, 0.3, -0.1, 0.1]}},
{"Lufthansa":{"data":[0.3, -0.2, 0.5, 0.2, 0.1]}}]
labels = ["company", "food", "luggage", "punctuality", "staff"]
Я пробовал несколько решений, включая это одно, но из-за этого мое приложение не отображало диаграмму даже после нажатия кнопки «Показать диаграмму». Я начал изучать JS на прошлой неделе, так что нуб ... Любая помощь будет принята с благодарностью. Спасибо!