Bootstrap Popover下面的Highchart数据呈现

时间:2014-05-06 06:30:59

标签: javascript jquery twitter-bootstrap highcharts

我正在尝试将图表从Highcharts加载到Bootstrap popover中。虽然,系列路径(带点点的所有数据)都在图表或弹出窗口的下方(或其他地方)呈现。我试图调试这个问题非常困难,似乎无法找到解决方法。

jQuery(不要感到不知所措,大部分只是Highchart选项):

$('td.chartSection').each(function () {
    var $thisElem = $(this);
    $thisElem.popover({
        placement: 'top',
        trigger: 'hover',
        html: true,
        container: $thisElem,
        delay: {
            hide: 500
        },
        content: function () {
            //Loading all the chart data and dates
            var chartData = [10.82, 11.79, 12.89, 14.01, 13.01, 10.11, 9.11, 7.02, 8.00, 10.55, 9.00, 11.20, 13.67, 13.56, 17.39, 18.34, 19.90, 19.23, 18.29, 17.10, 18.20, 18.29];
            var chartDates = ["01 Apr", "02 Apr", "03 Apr", "04 Apr", "05 Apr", "06 Apr", "07 Apr", "08 Apr", "09 Apr", "10 Apr", "11 Apr", "12 Apr", "13 Apr", "14 Apr", "15 Apr", "16 Apr", "17 Apr", "18 Apr", "19 Apr", "20 Apr", "21 Apr", "22 Apr"];

            //Finding the minimum and maximum values within the data
            var maxi = Math.max.apply(Math, chartData);
            var mini = Math.min.apply(Math, chartData);

            $thisElem.append('<span class="largeChart"></span>');

            var $largeChart = $('.largeChart');

            $largeChart.highcharts({
                series: [{
                    data: chartData,
                    zIndex: 99999
                }],
                chart: {
                    type: 'area',
                    width: 700,
                    height: 300
                },
                title: {
                    text: ''
                },
                xAxis: {
                    categories: chartDates
                },

                legend: {
                    enabled: false
                },
                yAxis: {
                    max: maxi,
                    min: mini,
                    labels: {
                        formatter: function () {
                            return this.value;
                        }
                    },
                    title: {
                        text: null
                    },
                },
                tooltip: {
                    pointFormat: '${point.y}'
                },

                credits: {
                    enabled: false
                },
                exporting: {
                    enabled: false
                }
            });

            var $finalChart = $largeChart;

            $largeChart.remove();


            return $finalChart[0].outerHTML;
        }
    });
});

故障:

首先,我为每个元素创建一个popover。在content选项中,我正在运行一个函数并返回一个值,即已完成的图表。在函数结束时,在返回之前,我将图表克隆到一个新变量,删除原始图表,并将新图表作为其原始outerHTML返回,因为这就是Bootstrap Popovers的工作方式。

虽然,我似乎无法在popover中查看图表系列。

如果您查看以下演示,并尝试使用已注释掉的行70运行它($largeChart.remove();),您会注意到图表确实成功地渲染了该系列。

更多测试:

此外,如果你RUN THIS DEMO .....

Chrome - 进入开发人员工具,查找表格中的第一个td元素,并查看svg元素的范围,然后找到类{{1}通过Bootstrap应用...将值更改为绝对其他任何内容,系统将显示。

Firefox - 系列会一直显示,直到动画完成,然后消失。

WORKING DEMO

1 个答案:

答案 0 :(得分:2)

检查一下,我有同样的问题,我设法通过更改几行代码来修复它, 由于你将div附加到你的popover父级,你的DOM中有2个图表,因此你不应该返回outerHTML

return $largeChart;

而不是

var $finalChart = $largeChart;
$largeChart.remove();
return $finalChart[0].outerHTML;

这是工作演示

http://jsfiddle.net/J88gH/3/

此外,您需要删除类largeChart的所有元素以避免多个图表

我也想感谢你提问,你帮助我解决了一段时间以来一直在努力的棘手问题