2012-05-17 62 views
1

我正在使用最新版本的jqPlot(v1.0.0b2_r1012)来绘制我的直方图。jqPlot - 如何捕捉双击事件

为了借助“jqplotDataClick”如下一个单一的点击事件我:

$('#myHistogram').bind('jqplotDataClick', function(ev, seriesIndex, pointIndex, data) { 
    // Do something 
}); 

是否有可能赶上双击事件呢?

不幸的是,我一直无法在jqplot.barRenderer.js中找到这样的事件。

更新:

我做了以下两个更改我jqplot.barRenderer.js文件:

注册jqplotDblClick事件

$.jqplot.BarRenderer.prototype.init = function(options, plot) { 
    ... 
    ... 
    plot.postInitHooks.addOnce(postInit); 
    plot.postDrawHooks.addOnce(postPlotDraw); 
    plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); 
    plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); 
    plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); 
    plot.eventListenerHooks.addOnce('jqplotClick', handleClick); 
    plot.eventListenerHooks.addOnce('jqplotDblClick', handleDblClick); 
    //$.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]); I've also tried this but without any luck 
    plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); 
}; 

实现handleDblClick功能

function handleDblClick(ev, gridpos, datapos, neighbor, plot) { 
    if (neighbor) { 
     var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; 
     var evt = jQuery.Event('jqplotDataDblClick'); 
     evt.pageX = ev.pageX; 
     evt.pageY = ev.pageY; 
     plot.target.trigger(evt, ins); 
    } 
} 

然后我在JavaScript文件结合jqplotDataDblClick如下:

$('#myHistogram').bind('jqplotDataDblClick', function(ev, seriesIndex, pointIndex, data) { 
    alert("Ohayo!"); // Good morning in Japanese 
}); 

然而,当我双击我的垂直条形图中的一个双击事件doensn't被解雇。我试过绑定“jqplotRightClick”,但这也不起作用。 如果我使用“jqplotClick”,那么一切都按预期工作。

有人知道我在做什么错吗?

更新2:

RE:我已经试过结合 “jqplotRightClick”,但也不起作用。 (见上文)

我刚刚发现,为了赶上这个活动,你必须设置如下:

captureRightClick: true, 

参见:How to capture right click event

回答

1

From the "cursor" plugin,他们处理它像这样:

if (c.dblClickReset) { 
    $.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]); 
} 

编辑

我可以通过绑定'jqplotDblClick'来捕获双击。我不必推动这个活动。对不起,我的答案上面的意思是表明事件已经存在。请参阅工作小提琴here。我添加的唯一附加事物是CSS规则,使div不可选,因为双击会选择它。

HTML:

<div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px; -moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;-ms-user-select: none;user-select: none;"></div>​ 

JS:

$(document).ready(function(){ 
     $.jqplot.config.enablePlugins = true; 
     var s1 = [2, 6, 7, 10]; 
     var ticks = ['a', 'b', 'c', 'd']; 

     plot1 = $.jqplot('chart1', [s1], { 

      seriesDefaults:{ 
       renderer:$.jqplot.BarRenderer 
      }, 
      axes: { 
       xaxis: { 
        renderer: $.jqplot.CategoryAxisRenderer, 
        ticks: ticks 
       } 
      } 
     }); 

     $('#chart1').bind('jqplotDblClick', 
      function (ev, seriesIndex, pointIndex, data) { 
       alert('hi'); 
      }); 
}); 
+0

+1好的。顺便说一句,你如何为一个图表而不是另一个图表服务这个事件? – Boro

+0

@Mark感谢您的指针。我在做了更多调查之后更新了我的初始帖子。你能告诉我为什么我的双击事件不会被解雇吗?我不知道我做错了什么。 – jpen

+0

@jpen查看编辑回答。 – Mark