Reputation: 18327
I have horizontal bar chart with Highcharts. How can I make each bar clickable for an event, for example like 'alert' ?
I have this series for example:
series : [{
name: 'John',
data: [5, 3, 4, 7, 2]
}, {
name: 'Jane',
data: [2, 2, 3, 2, 1]
}, {
name: 'Joe',
data: [3, 4, 4, 2, 5]
}];
What more should I do?
Upvotes: 22
Views: 47885
Reputation: 745
You can do this by adding following in plotOptions > series
. Example attached
point: {
events: {
click: function () {
alert('Category: ' + this.category + ', value: ' + this.y);
}
}
}
Upvotes: 0
Reputation: 6844
Add click event under Plotoption
plotOptions: {
series: {
point: {
events: {
click: function () {
alert(this.category)
}
}
}
}
}
Upvotes: 0
Reputation: 394
I needed to do a something similar. Hope it helps.
Disclaimer: I am using GWT Highcharts wrapper!
Here are the highlights of what I did:
1) I created an interface FooCallback that has a method bar( int index ) and implemented it
2) Created a method getBarClickCallback that returns a JavascriptObject (function), that has the FooCallback as a param
3) I add a click callback in the chart option /plotOptions/series/point/events/click, passing it getBarClickCallback
4) Once a bar is clicked, FooCallback.bar( int index ) is invoked
...
chart.setOption("/plotOptions/series/point/events/click",getBarClickCallback(this));
private native static JavaScriptObject getBarClickCallback(FooCallback callback) /*-{
return function()
{
if( this.x !== "undefined" && this.x >= 0 ){
[email protected]::bar(I)(this.x);
}
};
}-*/;
public void bar( int index ){
//handle chosen index
}
...
Additionally I wanted to listen to category label clicks (By the way I am showing an inverted bar graph that has categories)
1) Created a method that will locate categories in the dom and add click events to them. I called it addLabelClickHandler(FooCallback callback, String chartId) and used jquery to add the events.
2) Add a ChartLoadEventHandler that calls addLabelClickHandler() that forwards params to addLabelClickHandler(FooCallback callback, String chartId)
3) Once a axis category is clicked, FooCallback.bar( int index ) is invoked ...
chart.setLoadEventHandler(new ChartLoadEventHandler() {
@Override
public boolean onLoad(ChartLoadEvent chartLoadEvent) {
addLabelClickHandler();
return false;
}
});
private void addLabelClickHandler(){
addLabelClickHandler(this,chart.getElement().getId());
}
private native static void addLabelClickHandler(FooCallback callback, String chartId)/*-{
try {
var search = '#' + chartId + ' .highcharts-axis-labels:first text';
$wnd.jQuery(search).each(
function(i, j) {
$wnd.jQuery(this).css("cursor", "pointer");
$wnd.jQuery(this).click(function() {
[email protected]::bar(I)(this.x);
});
});
} catch (err) {
console.log(err);
}
}-*/;
Jeff
Upvotes: 2
Reputation: 18155
You might find the Highcharts Options Reference a good starting point.
From the reference, here's an example of a column chart where clicking a column fires an alert.
Upvotes: 41