2017-06-20 26 views
2

こんにちは:)(私は初心者だと私は仕事で学ぶ)、Chart.js jQueryのドロップダウン選択された値

は現在、私は棒グラフを持っていますPostgreSQLデータベースに直接リンクされています。

グラフを動的に更新する「ゾーン」をユーザーが選択できるように、ドロップダウンを追加したいと思います。

各 "ゾーン" は、異なる変数があります。ここでは、人口、給与(英語の従業員数)など

を私は次の配列

[{"id":"1","zone_nom":"test ","zone_pop":"36105","zone_salaries":"15279"},{...],{...}] 
を取得する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); 

?> 

です

次に、テーブルで動的に入力されるドロップダウンを生成します。

しかし、私は選択肢の値は

を返され

<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); 
}); 

は私が探していますが、私は今のところ解決策(おそらくない非常に複雑な)を見つけることができません

あなたはトンを達成することができ、あなたの助け

+0

私はあなたが何をしているのかをほとんど理解していますが、選択したドロップダウン値に基づいてチャートがどのように表示されるかをどのように変更するかは不明です。この選択に基づいてデータをフィルタリングする方法をチャートコードに表示できますか? – mjw

答えて

2

のために事前にありがとう彼のデフォルト、使用して最初のオプションを選択したい場合などに取り組ん

...、

$("#zone-select").val(zonePop[0]).trigger('change'); 
を...あなたのドロップダウンメニューの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>

+1

うん、それは再び働く、ありがとう! このメソッドを他のチャートで分析してテストします – RemiF

関連する問題