Столбчатая диаграмма jqplot: получить значение метки серии по клику

Я хочу отобразить метку панели, когда я нажимаю на нее. у меня есть

Вот код JSF

<p:barChart id="endingContractsChart" value="#{portalContractLifeCycle.endingContractsChartModel}" 
        binding="#{portalContractLifeCycle.endingContractsBarChart}" extender="toInteger" 
        barMargin="3" min="0" max="5" yaxisFormat="%d" xaxisGrid="false" styleClass="kmstate mm-metergauge" animate="true"  >

</p:barChart> 

и это javascript(jquery), который я использую для события onclick:

var plot =$(document.getElementById('rrrr:qcontractoverview:endingContractsChart'));

 plot.bind('jqplotDataClick',
        function (ev, seriesIndex, pointIndex, data) {
document.getElementById('rrrr:qcontractoverview:pointIndex').value=pointIndex;
    $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data+'x : '+plot.series[seriesIndex].data[pointIndex][0]+' Y: '+plot.series[seriesIndex]["label"] );
        }
      ); 

info3 - это диапазон, в котором я отображаю значения (как в примере на http://www.jqplot.com/tests/bar-charts.php)

Я пробовал это с plot.series[seriesIndex]["label"], но проблема в том, что заговор не определен.

Все примеры в интернете, которые я вижу, - это когда диаграмма определена в javascript, а не в jsf. И там сюжет назначается при создании графика. Я попытался присвоить plot для (document.getElementById('rrrr:qcontractoverview:endContractsChart'), но это не сработало.

Любые предложения или решения о том, как я могу достичь своей цели?

4 ответа

Вы уже связали событие клика с графиком. Итак, снова вам не нужно использовать plot.series[seriesIndex]["label"]. Вместо этого просто используйте series [seriesIndex] ["label"].

Это даст вам значение метки, которое вы ищете.

Не уверен, поможет ли это мне, у меня была похожая проблема с падением точки на линейном графике, и я хотел прочитать метку оси.

$('#chartdiv').bind("jqplotClick", function(ev, seriesIndex, pointIndex, data, plot) {

    console.log('Plot Index: '+data.data[0]);
    console.log('Plot Value: '+data.data[1]);  
    console.log('Plot Label: '+plot.series[data.seriesIndex].label);
});

В обратном вызове есть дополнительный параметр, который относится ко всему графику, от которого вы можете использовать plotIndex в данных для доступа к метке серии.

Ох хорошо Это зависит от имени, которое вы использовали при передаче данных на график.

Если данные как ниже
var seriesData =[{label:"XYZ"},{label:"ABC"}];

Приведенный ниже код возвращает меткуseriesData[seriesIndex]["label"] или seriesData[seriesIndex].label

Так что просто проверьте имя переменной в данных и используйте то же самое.

Может быть, вы можете попробовать <p:ajax/> like what described in primefaces show case

And your code may looks like:

<p:barChart id="endingContractsChart" value="#{portalContractLifeCycle.endingContractsChartModel}" 
    binding="#{portalContractLifeCycle.endingContractsBarChart}" extender="toInteger" 
    barMargin="3" min="0" max="5" yaxisFormat="%d" xaxisGrid="false" styleClass="kmstate mm-metergauge" animate="true"  >
<p:ajax event="itemSelect" listener="#{portalContractLifeCycle.itemSelect}" update="info3" />
</p:barChart>

And in the Backing Bean:

private String info;

public void itemSelect(ItemSelectEvent event) {  
info="series: "+ event.getSeriesIndex() +", point: "+event.getItemIndex();
}  //You may gain data with the series and point 

public String getInfo(){
return info;
}
Другие вопросы по тегам