2012-05-17 60 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