在页面jqPlot上有一个在jqPlot图表上拖动数据点的示例。
如何向服务器更改值提交(例如使用jQuery ajax)?更改(当前)值是否存储在jqplot对象的某个位置?
答案 0 :(得分:2)
最困难的事情是知道用户何时拖动一个点,而不是之后获取数据。我建议你像这样使用postDrawSeries钩子:
$(document).ready(function () {
// set up plot
$.jqplot.config.enablePlugins = true;
s1 = [['23-May-08',1],['24-May-08',4],['25-May-08',2],['26-May-08', 6]];
plot1 = $.jqplot('chart1',[s1],{
title: 'Highlighting, Dragging, Cursor and Trend Line',
axes: {
xaxis: {
renderer: $.jqplot.DateAxisRenderer,
tickOptions: {
formatString: '%#m/%#d/%y'
},
numberTicks: 4
},
yaxis: {
tickOptions: {
formatString: '$%.2f'
}
}
},
highlighter: {
sizeAdjust: 10,
tooltipLocation: 'n',
tooltipAxes: 'y',
tooltipFormatString: '<b><i><span style="color:red;">hello</span></i></b> %.2f',
useAxesFormatters: false
},
cursor: {
show: true
}
});
// add our hook, to fire after a series update
$.jqplot.postDrawSeriesHooks.push(updatedSeries);
function updatedSeries(sctx, options) {
console.log(plot1.series[0].data); //data for the series is here
}
});
每次拖动的输出是(包含更新的数据点):
[
Array[2]
,
Array[2]
,
Array[2]
,
Array[2]
]
Here's an example.(您必须在浏览器中缓存jqPlot js文件,因为它们不允许热链接。)
在调用你的ajax之前,你必须实现某种类型的计时器等待5秒左右,因为postdrawseries钩子会在每个拖动事件上触发。这应该不会太难。
答案 1 :(得分:1)
postDrawSeriesHooks 的问题在于它在您点击图表的整个过程中都会运行。如果你正在进行ajax调用,这可能是一个真正的混乱。我会将 jqplotClick 事件绑定到您的图表上。您甚至可以到达特定点,也可以每次保存所有数据。但每次点击只会保存一次。
$("#chart1").on("jqplotClick", function(ev, gridpos, datapos, neighbor) {
if ( neighbor ) {
// specific point that has been clicked
console.log('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
}
// all the data from this plot's single series
console.log(plot1.series[0].data);
});
这是一个包含多个图形的示例,每次点击都会对php文件进行ajax调用,并存储两个图形中的所有数据点。这只允许每个情节的单个系列。
var plots = [
$.jqplot('chart1', [s0], graph_opts),
$.jqplot('chart2', [s1], graph_opts)
];
$("#chart1, #chart2").on("jqplotClick", function(ev, gridpos, datapos, neighbor) {
var data = [];
$.each(plots, function(key, plot) {
data[key] = plot.series[0].data;
});
var ajax_opts = {
url: ajax_info.url,
type: 'post',
async: true,
cache: false,
dataType: 'json',
data: {
action: 'store_graphs',
data: data
},
success: function( response ) {
console.log(response);
},
error: function( xhr, textStatus, e ) {
console.log(xhr.responseText);
}
};
$.ajax(ajax_opts);
});
答案 2 :(得分:1)
这个答案真的帮助了我们。
我注意到还有另一个钩子,jqplotDragStop。
因此,通过使用它,我们可以在每次拖动停止时调用ajax。正是我们所寻找的。 p>
$('#chart1').bind('jqplotDragStop',
function (seriesIndex, pointIndex, pixelposition, data) {
// do your stuff here
});
希望这会有所帮助(很抱歉,无法弄清楚如何添加评论,对stackoverflow来说是新的。)