javascript - 为什么我的按钮不起作用?

标签 javascript html chart.js

您好,我使用 javascript 和 Chart.js 在 HTML 中编写了此代码:

var chart_labels = ['06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
var temp_dataset = ['1', '8', '10', '10', '9', '7'];
var rain_dataset = ['0', '0', '6', '32', '7', '2'];
var ctx = document.getElementById("forecast").getContext('2d');
var config = {
  type: 'bar',
  data: {
    labels: chart_labels,
    datasets: [{
      type: 'line',
      label: "Temperature (Celsius)",
      yAxisID: "y-axis-0",
      fill: false,
      data: temp_dataset,
    }, {
      type: 'bar',
      label: "Precipitation (%)",
      yAxisID: "y-axis-1",
      data: rain_dataset,
    }]
  },
  options: {
    scales: {
      yAxes: [{
        position: "left",
        "id": "y-axis-0",
      }, {
        position: "right",
        "id": "y-axis-1",
      }]
    }
  }
};
var forecast_chart = new Chart(ctx, config);
$("#0").click(function() {
  var data = forecast_chart.config.data;
  data.datasets[0].data = temp_dataset;
  data.datasets[1].data = rain_dataset;
  data.labels = chart_labels;
  forecast_chart.update();
});
$("#1").click(function() {
  var chart_labels = ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
  var temp_dataset = ['5', '3', '4', '8', '10', '11', '10', '9'];
  var rain_dataset = ['0', '0', '1', '4', '19', '19', '7', '2'];
  var data = forecast_chart.config.data;
  data.datasets[0].data = temp_dataset;
  data.datasets[1].data = rain_dataset;
  data.labels = chart_labels;
  forecast_chart.update();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>

<canvas id="forecast" width="300" height="150"></canvas>
<button id="0" type="button">Dataset 1</button>
<button id="1" type="button">Dataset 2</button>

但问题是,当我单击按钮时,它没有任何效果...根据您的说法,问题出在哪里?据我所知,我正确定义了我的函数,所以应该没问题,但事实并非如此。

我该如何解决这个问题?

谢谢!

最佳答案

当您使用jquery选择器来选择按钮时,您的事件处理程序和chart.js的代码应该位于$(document).ready()内。所以它会起作用。检查下面的代码 -

<script>
$(document).ready(function(){
 var chart_labels = ['06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
var temp_dataset = ['1', '8', '10', '10', '9', '7'];
var rain_dataset = ['0', '0', '6', '32', '7', '2'];
var ctx = document.getElementById("forecast").getContext('2d');
var config = {
    type: 'bar',
    data: {
        labels: chart_labels,
        datasets: [{
            type: 'line',
            label: "Temperature (Celsius)",
            yAxisID: "y-axis-0",
            fill: false,
            data: temp_dataset,
        }, {
            type: 'bar',
            label: "Precipitation (%)",
            yAxisID: "y-axis-1",
            data: rain_dataset,
        }]
    },
    options: {
        scales: {
            yAxes: [{
                position: "left",
                "id": "y-axis-0",
            }, {
                position: "right",
                "id": "y-axis-1",
            }]
        }
    }
};
var forecast_chart = new Chart(ctx, config);
$("#0").click(function() {
    var data = forecast_chart.config.data;
    data.datasets[0].data = temp_dataset;
    data.datasets[1].data = rain_dataset;
    data.labels = chart_labels;
    forecast_chart.update();
});
$("#1").click(function() {
    var chart_labels = ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00'];
    var temp_dataset = ['5', '3', '4', '8', '10', '11', '10', '9'];
    var rain_dataset = ['0', '0', '1', '4', '19', '19', '7', '2'];
    var data = forecast_chart.config.data;
    data.datasets[0].data = temp_dataset;
    data.datasets[1].data = rain_dataset;
    data.labels = chart_labels;
    forecast_chart.update();
});
});

</script>

这是一个工作演示:https://jsfiddle.net/7t6vfdwf/2/

您可以看到按钮可以在单击时更改数据集。

关于javascript - 为什么我的按钮不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50564349/

相关文章:

javascript - Marionette - modelEvents 不起作用

html - 在不更改父 div 的情况下,在 div 中居中对齐图像

javascript - 将占位符添加到 ng-grid

jquery - 使用 HTML5 不使用 Phonegap 打开 iOS 相机

javascript - ngRoute 加载模板时 OffsetWidth/offsetHeight 为零

javascript - 适用于 macOS 的 Node.js 应用程序捆绑

javascript - 如何使用 Javascript 在 Gridview 中设置来自数据库的文本区域行数

javascript - Chartjs 不会使用 Requirejs 渲染图表

javascript - 在chartjs中渲染Rails json数据

angularjs - 使用图表 js 2.0 扩展现有图表类型 Angular 图表 js