我使用jqplot绘制一些图表。它是一个很棒的工具,但它缺少每个图表的简单clickhandler选项。
它的插件如荧光笔,可拖动和光标通过将自身添加到jqplot.eventListenerHooks(eventListenerHooks.push(['jqplotClick',callback])来注册他们对从jqplot画布捕获click / mouse-events的兴趣;例如。或者'jqplotMouseDown'等也可用。
使用通常的$ .jqplot(目标,数据,选项)制作我的情节后; 然后我这样做
$.jqplot.eventListenerHooks.push(['jqplotClick', myFunc]);
并且确定在我点击地图时会调用myFunc,event
,neighbour
,datapos
和gridpos
。邻居是最有趣的,它包含我的数据点,如果点击它。这是我需要使用数据点上的附加信息使弹出窗口靠近gridpos所需的数据。
但问题是,如果我在同一页面上有两个图表,并希望为每个jqplot注册不同的回调。就像现在一样,当我注册第二个myFunc2时,第二个绘图上的所有点击都会通过myFunc!
我是否需要对jqplot进行更改?任何方向,无论如何?
由于
答案 0 :(得分:10)
这没有详细记录,但您可以找到关于它的讨论here。
基本上,您需要为图表创建事件处理程序调用jqplot以创建实际图表。要做到这一点,你需要做这样的事情:
var handler = function(ev, gridpos, datapos, neighbor, plot) {
if (neighbor) {
alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
}
};
$.jqplot.eventListenerHooks.push(['jqplotClick', handler]);
这只是一个简单的事件处理程序,它会检查您在单击的位置附近是否存在相邻数据点。请在此处查看工作示例:http://jsfiddle.net/andrewwhitaker/PtyFG/
更新:如果您只想收听某个地块上的活动,可以执行以下操作:
var handler = function(ev, gridpos, datapos, neighbor, plot) {
if (plot.targetId === "#chartdiv") {
if (neighbor) {
alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
}
}
else if (plot.targetId === "#chart2div") {
....
}
// etc...
};
您要将#chartdiv
替换为您想要侦听事件的图表的ID。该示例已更新。
更新2:看起来您可以将常规bind
事件与情节事件一起使用:
$("#chartdiv").bind("jqplotClick", function(ev, gridpos, datapos, neighbor) {
if (neighbor) {
alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
}
});
使用此方法的示例,带有2个图表:
http://jsfiddle.net/andrewwhitaker/PtyFG/5/
希望有所帮助!