显示/隐藏Highchart内容

时间:2016-10-05 05:16:34

标签: javascript jquery html css highcharts

我有一个下拉框,2个日期选择框表示来自&通过AJAX的日期和POST值的按钮,其结果显示在图表中。输入框并单击按钮后,图表应显示在相应的div上。单击其中一个日期选择器时,应隐藏div。当我第一次这样做时,行为似乎正常。但是,当我再次这样做时,图表不会出现,并显示此错误:

Uncaught TypeError: O[1].indexOf is not a function

这是jsfiddle,第二次也没有得到图表

http://jsfiddle.net/t13jymwk/87/

这是代码:

<script type="text/javascript">
     var strarr = "[{name:'sfdsdfLi', y:9}, {name:'Kiwsdfi', y:3}, {name:'Mixesdfdnuts', y:1} ,{name:'Oranges', y:6}, {name:'Grapes', y:1}]";
     $(function () {
         $("#search_data").on('click', function () {

         $.ajax({
             type: "POST",
             url: "WebForm1.aspx/GetVo",
             data: JSON.stringify(obj),
             contentType: "application/json; charset=utf-8",
             dataType: "json",
             async: true,
             cache: false,
             success: function (result) {
                 var myData = result.d;
                 console.log(result.d);
                 alert(result.d)
                 if (myData !== null && Object.keys(myData).length !== 0) {
                     strarr = result.d;
                     var myarr = eval(strarr);

                     $("#container").show();

                 }

              else {

                  $("#container").hide();


                  return;
                 }
Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function (color) {
                     return {
                         radialGradient: {
                             cx: 0.5,
                             cy: 0.3,
                             r: 0.7
                         },
                         stops: [
                           [0, color],
                           [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken
                         ]
                     };
                 });
                 $('#container').highcharts({
                     chart: {
                         events: {
                             load: function (event) {
                                 var total = 0;
                                 for (var i = 0, len = this.series[0].yData.length; i < len; i++) {
                                     total += this.series[0].yData[i];
                                 }
                                 var text = this.renderer.text(
                                   'Total: ' + total,
                                   this.plotLeft,
                                   this.plotTop - 20
                               ).attr({
                                   zIndex: 5
                               }).add()
                             }
                         },                 
                         plotBackgroundColor: null,
                         plotBorderWidth: 1,
                         plotShadow: false,
                         width: 500,
                         height: 300,
                         type: 'pie'                         
                     },
                     title: {
                         text: ' Region: '  + reg
                     },
                     subtitle: {
    text: '<br> From Date:' + obj.fromdate + '<br> To Date:' + obj.todate
                     },
                     tooltip: {
                         pointFormat: '<b>{point.name}</b>: {point.y}'
                     },
                     plotOptions: {
                         pie: {
                             allowPointSelect: true,
                             cursor: 'pointer',
                             dataLabels: {
                                 enabled: true,
                                 format: '<b>{point.name}</b>: {point.y}',
                             },
                             showInLegend: true
                         }
                     },
                     series: [{
                         name: 'Delivered amount',
                         data: myarr
                     }]
                 });   },
            error: function (error) {
                alert('no data');
            }
        });

<script type="text/javascript">
         $(function () {
             var currentYear = (new Date).getFullYear();
             var currentMonth = (new Date).getMonth();
             var currentDay = (new Date).getDate();
             $('#fromdate').datepicker({
                 showSecond: false,
                 timeFormat: 'HH:mm',
                 minDate: new Date((currentYear - 2), 12, 1),
                 dateFormat: 'yy-mm-dd',
                 maxDate: new Date(currentYear, currentMonth, currentDay),
                 onSelect: function (selectedDate) {
                     var startDate = $(this).datepicker('getDate');
                     $('#todate').datepicker('option', 'minDate', startDate);
                     $('#todate').datepicker('setDate', startDate);
                     var enddate = $(this).datepicker('getDate');
                     enddate.setDate(enddate.getDate() + 60); 
                     $('#todate').datetimepicker('option', 'maxDate', enddate);
                 }
             });

             $('#todate').datepicker({
                 showSecond: false,
                 timeFormat: 'HH:mm',
                 minDate: new Date((currentYear - 2), 12, 1),
                 minDate: 0,
                 dateFormat: 'yy-mm-dd',
                 maxDate: '+30',     
             });

             $('#fromdate').on('click', function () {

                 $('#container').hide();

             $('#todate').on('click', function () {

                 $('#container').hide();

             });
         });
      </script>

HTML:

      <div id="container" class="container1">

      </div>

 <asp:DropDownList ID="regiondrop" runat="server" AutoPostBack="True" 
    onselectedindexchanged="regiondrop_SelectedIndexChanged">
    </asp:DropDownList>  

      <span>
    <asp:Label ID="Label1" runat="server" Text="From Date"></asp:Label>

    <input  ID="fromdate"   value="dd/mm/yyyy" runat="server" clientidmode="static" />

   </span>
     <span>
     <asp:Label ID="Label2" runat="server" Text="To Date"></asp:Label>

     <input  ID="todate"   value="dd/mm/yyyy" runat="server" clientidmode="static" />
   </span>

<input type="button" id="search_data"    class="sear_btn"  value="Search Data" />

2 个答案:

答案 0 :(得分:0)

好吧,我解决了这个问题,我将此部分粘贴到此行之前,这对我来说是

 $("#search_data").on('click', function () {

Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function (color) {
                     return {
                         radialGradient: {
                             cx: 0.5,
                             cy: 0.3,
                             r: 0.7
                         },
                         stops: [
                           [0, color],
                           [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken
                         ]
                     };
                 });

答案 1 :(得分:0)

您可以使用Highcharts附带的chart.update()功能。

http://api.highcharts.com/highmaps/Chart.update

  • 为您的图表定义一个新的var,以便以后可以使用它。
  • 在该变量中保存新的Highcharts实例。
  • 随时更新实例。

我的代码,try it in jsfiddle:

var chart, chartObj, strArray = [
  ['sfdsdfLi', 9],
  ['Kiwsdfi', 3],
  ['Mixesdfd nuts', 1],
  ['Oranges', 6],
  ['Grapes (bunch)', 1]
];

$(function() {
  $('[ID*=search_data]').on('click', function() {
    Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function(color) {
      return {
        radialGradient: {
          cx: 0.5,
          cy: 0.3,
          r: 0.7
        },
        stops: [
          [0, color],
          [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken
        ]
      };
    });

    chartObj = {
      chart: {
        plotBackgroundColor: null,
        plotBorderWidth: null,
        plotShadow: false,
        type: 'pie'
      },
      title: {
        text: 'Browser market shares. January, 2015 to May, 2015'
      },
      tooltip: {
        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
      },
      plotOptions: {
        pie: {
          allowPointSelect: true,
          cursor: 'pointer',
          dataLabels: {
            enabled: true,
            format: '<b>{point.name}</b>: {point.percentage:.1f} %',
            style: {
              color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
            },
            connectorColor: 'silver'
          }
        }
      },
      series: [{
        name: 'Brands',
        data: [{
          name: 'Microsoft Internet Explorer',
          y: 56.33
        }, {
          name: 'Chrome',
          y: 24.03,
          sliced: true,
          selected: true
        }, {
          name: 'Firefox',
          y: 10.38
        }, {
          name: 'Safari',
          y: 4.77
        }, {
          name: 'Opera',
          y: 0.91
        }, {
          name: 'Proprietary or Undetectable',
          y: 0.2
        }]
      }]
    };

    if (typeof chart !== "undefined") {
      console.log("updating!");
      chart.update(chartObj);
    } else {
      console.log("creating!");
      chart = Highcharts.chart('container', chartObj);
    }
  });
});
/*,
    error: function (Result) {
      alert("Error");
    }
  });
}*/