#javascript #jquery #charts #google-visualization
#javascript #jquery #Диаграммы #google-визуализация
Вопрос:
Что я здесь делаю, так это добавляю ссылку для каждого столбца, но она работает только с первым link1
столбцом.
Пожалуйста, помогите мне исправить эту проблему и сделать мой код короче, когда для каждого не только 3 links
Plant
.
['Year', 'link1', 'Dollars', 'link2', 'Conts', 'link3', 'Quantity'],
['Plant 1', 'http://google.com', 1000, 'http://bing.com', 400, 'http://alexa/com', 2000],
['Tan Thanh', 'http://dell.com', 1170, 'http://lenovo.com', 460, 'http://hp.com', 1420],
['Plant 3', 'http://w3schools.com', 660, 'http://microsoft.com', 1120, 'http://adobe.com', 1080],
['Plant 4', 'http://apple.com', 1030, 'http://htc.com', 540, 'http://samsung.com', 2240]
Краткие сведения:
На заводе 1:
Проблема здесь:
- Нажмите на первый столбец (синий столбец), появится новая вкладка
http://google.com
. - Нажмите на второй столбец (красный столбец), появится новая вкладка
http://google.com
. - Нажмите на третий столбец (желтый столбец), появится новая вкладка
http://google.com
.
Это должно быть:
- Нажмите на первый столбец (синий столбец), появится новая вкладка
http://google.com
. - Нажмите на второй столбец (красный столбец), появится новая вкладка
http://bing.com
. - Нажмите на третий столбец (желтый столбец), появится новая вкладка
http://alexa/com
.
ДЕМОНСТРАЦИЯ
HTML:
<div id="chart_div" style="width: 550px; height: 500px;"></div>
Javascript:
google.load("visualization", "1", {
packages: ["corechart"]
});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'link1', 'Dollars', 'link2', 'Conts', 'link3', 'Quantity'],
['Plant 1', 'http://google.com', 1000, 'http://bing.com', 400, 'http://alexa/com', 2000],
['Tan Thanh', 'http://dell.com', 1170, 'http://lenovo.com', 460, 'http://hp.com', 1420],
['Plant 3', 'http://w3schools.com', 660, 'http://microsoft.com', 1120, 'http://adobe.com', 1080],
['Plant 4', 'http://apple.com', 1030, 'http://htc.com', 540, 'http://samsung.com', 2240]
]);
var view = new google.visualization.DataView(data);
view.setColumns([0, 2, 4, 6]);
var options = {
title: 'Company Performance'
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(view, options);
function selectHandler1() {
window.open(data.getValue(chart.getSelection()[0]['row'], 1), '_blank');
}
function selectHandler2() {
window.open(data.getValue(chart.getSelection()[0]['row'], 3), '_blank');
}
function selectHandler3() {
window.open(data.getValue(chart.getSelection()[0]['row'], 5), '_blank');
}
// Add our selection handler.
google.visualization.events.addListener(chart, 'select', selectHandler1);
google.visualization.events.addListener(chart, 'select', selectHandler2);
google.visualization.events.addListener(chart, 'select', selectHandler3);
}
Ответ №1:
Используйте один обработчик событий и извлекайте соответствующий URL-адрес на основе индекса столбца выбранного элемента:
google.visualization.events.addListener(chart, 'select', function () {
var selection = chart.getSelection();
// test selection array length, since it can be 0 if the user deselects an element
if (selection.length) {
var row = selection[0].row;
// convert the view column index to the table column index,
// then subtract 1 to get the URL index
var urlCol = view.getTableColumnIndex(selection[0].column) - 1;
window.open(data.getValue(row, urlCol), '_blank');
}
});
Комментарии:
1. Это здорово. Однако, похоже, что он не работает должным образом, как
first
иthird
столбец. Ваш код хорошо работает соsecond
столбцом в качестве обновленного JSFILLDE jsfiddle.net/huydq91/JASWb/22. Извините, вам необходимо преобразовать индекс столбца представления в индекс столбца DataTable :
var urlCol = view.getTableColumnIndex(selection[0].column) - 1;
. Ответ обновлен.