麻烦得到flot工具提示出现

时间:2015-04-20 18:52:43

标签: jquery flot

我试图让flot工具提示出现,但什么也没发生。有谁能告诉我我做错了什么,拜托?也许它不能识别我的观点,它们出现在图表上(y轴上的人数,x轴上的年份)。

$.post('php/myprogram.php', 
                 function(output){
                        var obj = jQuery.parseJSON( output );
                        var data = [];
                        var coordinate = [];
                        for (var i = 0; i< obj.length-1; i++) {
                            coordinate.push(obj[i][0]);
                            coordinate.push(obj[i][1]);
                            data.push(coordinate);
                            coordinate = [];
                        }

                            var options = {
                                xaxis: {
                                    axisLabel: 'YEAR',
                                    axisLabelUseCanvas: true,
                                    axisLabelFontSizePixels: 15,
                                    axisLabelFontFamily: 'Arial',
                                    tickDecimals: 0
                                },
                                yaxis: {
                                    axisLabel: '',
                                    axisLabelUseCanvas: true,
                                    axisLabelFontSizePixels: 15,
                                    axisLabelFontFamily: 'Arial'
                                },
                                series: {
                                    lines: {
                                        show: true,
                                        color: '#ffa500'
                                    },
                                    points: {
                                        show: true
                                    }
                                },
                                grid: {
                                    hoverable: true
                                }
                            };

                            $.plot($("#byYear"),
                                    [data],
                                   options
                            );


                        function showTooltip(x, y, contents) {
                            $("<div id='tooltip'>" + contents + "</div>").css({
                                position: "absolute",
                                display: "none",
                                top: y + 5,
                                left: x + 5,
                                border: "1px solid #fdd",
                                padding: "2px",
                                "background-color": "#fff",
                                opacity: 0.80
                            }).appendTo("body").fadeIn(200);

                        }


                        $("#byYear").bind("plothover", function (event, pos, item) {
                                var str = "(" + pos.x.toFixed(2) + ", " + pos.y.toFixed(2) + ")";
                                //$("#hoverdata").text(str);

                                if (item) {
                                    if (previousPoint != item.dataIndex) {

                                        previousPoint = item.dataIndex;

                                        $("#tooltip").remove();
                                        var x = item.datapoint[0].toFixed(2);
                                        var y = item.datapoint[1].toFixed(2);

                                        showTooltip(item.pageX, item.pageY, str);
                                    }
                                } else {
                                    $("#tooltip").remove();
                                    previousPoint = null;            
                                }

                        }); //end bind
                 });

3 个答案:

答案 0 :(得分:0)

在此fiddle中工作得很好。

但是您在showTooltip()回调中定义了bind()$.post()函数。这意味着在多个ajax调用之后,您多次调用plothover函数。尝试将这两个函数移出$.post()回调。

答案 1 :(得分:0)

您可以使用“flot.tooltip”插件,而不是自己处理plothover个事件。

答案 2 :(得分:0)

@Raidri部分正确 - 我的工具提示需要在我的代码之外。但我不得不采取不同的方式:

html :(我只包括基本的flot代码)

<div id="tooltip"></div>
<div id="byYear"></div>

的CSS:

#byYear {
    width: 50%;
    height: 100%;
}
#tooltip {
    position: absolute;
    display: none;
    border: 1px solid black;
    padding: 2px 5px;
    background-color: white;
    opacity: 0.80;
    z-index: 5;
}

jquery的:

$.post('php/myprogram.php', 
                 function(output){
                        var obj = jQuery.parseJSON( output );
                        var data = [];
                        var coordinate = [];
                        for (var i = 0; i< obj.length-1; i++) {
                            coordinate.push(obj[i][0]);
                            coordinate.push(obj[i][1]);
                            data.push(coordinate);
                            coordinate = [];
                        }

                            var options = {
                                xaxis: {
                                    axisLabel: 'YEAR',
                                    axisLabelUseCanvas: true,
                                    axisLabelFontSizePixels: 15,
                                    axisLabelFontFamily: 'Arial',
                                    tickDecimals: 0
                                },
                                yaxis: {
                                    axisLabel: '',
                                    axisLabelUseCanvas: true,
                                    axisLabelFontSizePixels: 15,
                                    axisLabelFontFamily: 'Arial'
                                },
                                series: {
                                    lines: {
                                        show: true,
                                        color: '#ffa500'
                                    },
                                    points: {
                                        show: true
                                    }
                                },
                                grid: {
                                    hoverable: true
                                }
                            };

                            $("#byYear").bind("plothover", function (event, pos, item) {
                                if (item) {
                                        var x = item.datapoint[0].toFixed(0),
                                            y = item.datapoint[1].toFixed(0);

                                        $("#tooltip").html(y + " instances")
                                            .css({top: item.pageY+5, left: item.pageX+5})
                                            .fadeIn(200);
                                    } else {
                                        $("#tooltip").hide();
                                    }

                            });
                            $.plot($("#byYear"),
                                    [data],
                                   options
                            );



                 });