php - Chart.js jQuery 下拉选择值

标签 php jquery postgresql chart.js dropdown

你好:)(我是新手,边学边学),

我使用 Chart.js、jQuery、PostgreSQL

目前我有一个直接链接到 PostgreSQL 数据库的条形图。

我想添加一个下拉菜单以允许用户选择一个“区域”,这将动态更新图表。

每个“区域”都有不同的变量:人口、薪水(英文员 worker 数)等。

这是PHP

<?php

$dbconn = pg_connect("")
or die('Erreur de connexion'.pg_last_error());

$query = "SELECT id, zone_nom, zone_pop, zone_salaries FROM table";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());

$array = array();
while ($row = pg_fetch_array($result, null, PGSQL_ASSOC)) {
    $array[] = $row;
}

$data=json_encode($array);
echo $data;

pg_free_result($result);

pg_close($dbconn);

?>

我得到以下数组

[{"id":"1","zone_nom":"test ","zone_pop":"36105","zone_salaries":"15279"},{...],{...}]

然后我生成一个由我的表动态填充的下拉列表

但我一直纠结于如何在图表中传递选定的值(然后确保图表根据下拉列表中的选择进行刷新)

<html>
<head>
    <title>Liste déroulante dynamique</title>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/Chart.min.js"></script>
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v1.0.3/leaflet.css" />
    <script src="http://cdn.leafletjs.com/leaflet/v1.0.3/leaflet-src.js"></script>
    <script type="text/javascript">
        function Zone() {
            $('#zone-select').empty();
            $('#zone-select').append("<option>Chargement</option>");
            $.ajax({
                type: "POST",
                url: "http://localhost/data.php",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data){
                    $('#zone-select').empty();
                    $('#zone-select').append("<option value='0'>-- Select zone --</option>");
                    $.each(data,function(i, item){
                        $('#zone-select').append('<option value='+data[i].zone_pop+'>'+data[i].zone_nom+'</option>');
                    });

                    $("#zone-select").change(function(){
                        var value = $("#zone-select option:selected").val(); // Value of selected option
                        console.log('Value: '+value);
                    });

            // How to link the dropdown and the chart ?        

            var zoneNom = [];
            var zonePop = [];
            for(var i in data) {
                zoneNom.push(data[i].zone_nom);
                zonePop.push(data[i].zone_pop);
                zoneSalaries.push(data[i].zone_salaries)
            }
            var chartdata = {
                labels: zoneNom,
                datasets : [
                    {
                        label: 'Population',
                        backgroundColor: 'rgba(200, 200, 200, 0.75)',
                        borderColor: 'rgba(200, 200, 200, 0.75)',
                        hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                        hoverBorderColor: 'rgba(200, 200, 200, 1)',
                        data: zonePop
                    },
                    {
                        label: 'Salaries',
                        backgroundColor: 'rgba(200, 200, 200, 0.75)',
                        borderColor: 'rgba(200, 200, 200, 0.75)',
                        hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                        hoverBorderColor: 'rgba(200, 200, 200, 1)',
                        data: zoneSalaries
                    }
                ]
            };

            var option = {};
            var ctx = $("#mycanvas");
            var barGraph = new Chart(ctx, {
                type: 'bar',
                data: chartdata,
                options: option
            });
                    var myBarChart;

                },
                complete: function(){
                }
            });
        }
        $(document).ready(function(){
            Zone();
        });  

    </script>
</head>
<body>
    <select id="zone-select"></select>
    <div id="chart-container">
            <canvas id="mycanvas"></canvas>
    </div>
</body>
</html>

返回选择的值

$("#zone-select").change(function(){
   var value = $("#zone-select option:selected").val(); // Value of selected option
   console.log('Value: '+value);
});

我正在寻找但暂时找不到解决方案(可能不是很复杂)

预先感谢您的帮助

最佳答案

您可以使用以下下拉菜单的更改事件处理函数来完成此操作...

$("#zone-select").change(function() {
   var nom = $("#zone-select option:selected").text(); // name of selected option
   var index = zoneNom.indexOf(nom);
   var new_labels = [zoneNom[index]];
   var new_data1 = [zonePop[index]];
   var new_data2 = [zoneSalaries[index]];
   barGraph.data.labels = new_labels;
   barGraph.data.datasets[0].data = new_data1;
   barGraph.data.datasets[1].data = new_data2;
   barGraph.update(); // update chart
});

并且,如果您希望默认选择第一个选项,请使用 ...

$("#zone-select").val(zonePop[0]).trigger('change');

工作示例

function Zone() {
   $('#zone-select').empty();
   $('#zone-select').append("<option>Chargement</option>");
   $.ajax({
      type: "GET",
      url: "https://istack.000webhostapp.com/json/t9.json",
      dataType: "json",
      success: function(data) {
         //console.log(data)
         $('#zone-select').empty();
         $('#zone-select').append("<option value='0'>-- Select zone --</option>");
         $.each(data, function(i, item) {
            $('#zone-select').append('<option value=' + data[i].zone_pop + '>' + data[i].zone_nom + '</option>');
         });

         $("#zone-select").change(function() {
            var nom = $("#zone-select option:selected").text(); // name of selected option
            var index = zoneNom.indexOf(nom);
            var new_labels = [zoneNom[index]];
            var new_data1 = [zonePop[index]];
            var new_data2 = [zoneSalaries[index]];
            barGraph.data.labels = new_labels;
            barGraph.data.datasets[0].data = new_data1;
            barGraph.data.datasets[1].data = new_data2;
            barGraph.update(); // update chart
         });

         var zoneNom = [];
         var zonePop = [];
         var zoneSalaries = [];
         for (var i in data) {
            zoneNom.push(data[i].zone_nom);
            zonePop.push(data[i].zone_pop);
            zoneSalaries.push(data[i].zone_salaries)
         }
         var chartdata = {
            labels: zoneNom,
            datasets: [{
               label: 'Population',
               backgroundColor: 'rgba(200, 200, 200, 0.75)',
               borderColor: 'rgba(200, 200, 200, 0.75)',
               hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
               hoverBorderColor: 'rgba(200, 200, 200, 1)',
               data: zonePop
            }, {
               label: 'Salaries',
               backgroundColor: 'rgba(200, 200, 200, 0.75)',
               borderColor: 'rgba(200, 200, 200, 0.75)',
               hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
               hoverBorderColor: 'rgba(200, 200, 200, 1)',
               data: zoneSalaries
            }]
         };

         var option = {
            scales: {
               yAxes: [{
                  ticks: {
                     beginAtZero: true
                  }
               }]
            }
         };
         var ctx = $("#mycanvas");
         var barGraph = new Chart(ctx, {
            type: 'bar',
            data: chartdata,
            options: option
         });
         var myBarChart;

         $("#zone-select").val(zonePop[0]).trigger('change'); // select first option

      },
      complete: function() {}
   });
}
$(document).ready(function() {
   Zone();
});
<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.6.0/Chart.min.js"></script>
<select id="zone-select"></select>
<div id="chart-container">
   <canvas id="mycanvas"></canvas>
</div>

关于php - Chart.js jQuery 下拉选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44654008/

相关文章:

javascript - 实现一个迭代数组的运行器

javascript - MeteorJS 外部文件 : css and js

postgresql - 无法连接到 Heroku 上托管的 pg 数据库

php - 如何使用命令行界面 (CLI) 重命名 Laravel Controller ?

php - 如何从数据库中获取数据并创建动态选择?

PHP 解析错误; Drupal6 部署

php - 基于 token 的身份验证中的 session

postgresql - 调整 AWS RDS 中托管的 Postgresql 中的共享缓冲区大小

r - 在 RHEL 6.5 上安装 RPostgreSQL libpq-fe.h 报错

php - 分组依据(备注)php mysql中的值