teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードの変更

2020/06/15 12:46

投稿

i-nr
i-nr

スコア15

title CHANGED
File without changes
body CHANGED
@@ -1,102 +1,101 @@
1
1
  chartjsで折れ線グラフを作成しています。
2
2
  凡例をクリックするとグラフが表示・非表示と切り替わるように、セレクトボックスの選択で表示・非表示を切り替えたいです。
3
+ セレクトボックスは3つのカテゴリーに分けて、表示したいグラフをそこから選ぶようにしたいです。
3
4
 
5
+ セレクトボックスでグラフの表示を切り替えることはできたのですが、
6
+ グラフ名とセレクトされた項目名が一致せず、つまづいています。
7
+ グラフ自体はサンプル1-1とサンプル3-0とサンプル3-1が表示されているのに、
8
+ セレクトボックスではサンプル1-0、サンプル1-1、サンプル1-2で切り替わってしまいます。
9
+
4
10
  ご教授ください。
5
11
  よろしくお願いいたします。
6
12
 
7
13
 
14
+ 説明が分かりにくかったり、添付コードが不足していればご指摘ください。
8
15
  下記、現在のコードです。
9
16
  ```html
17
+ <div class="col-sm-2 col-md-2 col-lg-2">
18
+  <div class="form-group">
19
+   <label><span class="label-text">表示するグラフ(下記から選択)</span></label>
10
- <select multiple="multiple" name="accessCount" class="select-block" title="アクセス数">
20
+   <select multiple="multiple" name="category_1" class="select-block selectpicker" title="カテゴリー1" data-selected-text-format="count > 0" data-count-selected-text="カテゴリー1">
11
- <option value="0">サンプル</option>
21
+    <option value="0" class="1_0" id="1_0">サンプル1-0</option>
12
- <option value="1">サンプル</option>
22
+ <option value="1" class="1_1" id="1_1">サンプル1-1</option>
13
- <option value="2">サンプル</option>
23
+ <option value="2" class="1_2" id="1_2">サンプル1-2</option>
14
- <option value="3">サンプル</option>
24
+    <option value="3" class="1_3" id="1_3">サンプル1-3</option>
25
+ <option value="4" class="1_4" id="1_4">サンプル1-4</option>
26
+ <option value="5" class="1_5" id="1_5">サンプル1-5</option>
27
+ <option value="6" class="1_6" id="1_6">サンプル1-6</option>
15
- </select>
28
+   </select>
29
+  </div>
30
+ </div>
31
+ <div class="col-sm-2 col-md-2 col-lg-2">
32
+  <div class="form-group">
33
+   <label class="hidden-xs"><span class="label-text">&nbsp;</span></label>
34
+   <select multiple="multiple" name="category_2" class="select-block selectpicker" title="カテゴリー2" data-selected-text-format="count > 0" data-count-selected-text="カテゴリー2">
35
+    <option value="0" class="2_0" id="2_0">サンプル2-0</option>
36
+    <option value="1" class="2_1" id="2_1">サンプル2-1</option>
37
+   </select>
38
+  </div>
39
+ </div>
40
+ <div class="col-sm-2 col-md-2 col-lg-2">
41
+  <div class="form-group">
42
+   <label class="hidden-xs"><span class="label-text">&nbsp;</span></label>
43
+ <select multiple="multiple" name="category_3" class="select-block selectpicker" title="カテゴリー3" data-selected-text-format="count > 0" data-count-selected-text="カテゴリー3">
44
+    <option value="0" class="3_0" id="3_0">サンプル3-0</option>
45
+    <option value="1" class="3_1" id="3_1">サンプル3-1</option>
46
+   </select>
47
+  </div>
48
+ </div>
16
49
 
50
+ <div class="row">
51
+  <div class="col-md-10 col-lg-10">
17
- <canvas id="chart-line" style="max-width: none"></canvas>
52
+   <canvas id="myChart" style="max-width: none"></canvas>
53
+  </div>
54
+  <div id="chart-legends" class="col-md-2 col-lg-2 note" style="top: 72px"></div>
55
+ </div>
18
56
  ```
19
57
 
20
58
  ```js
21
59
  // 文字数上、datasetsの諸々の設定は省略してあります。
22
- var data = {
23
- labelsY: ["01/28 12:00","01/29 00:00","12:00","01/30 00:00","12:00"],
24
- sample1: [2,0,0,0,0],
25
- sample2: [1,0,0,0,0],
26
- sample3: false,
27
- sample4: false
28
- };
29
- var lineData = {
30
- labels : data.labelsY,
31
- datasets: [
32
- {
33
- label: "サンプル1",
34
- data: data.sample1,
35
- yAxisID: "leftNumberOfPeopleYaxis"
36
- },
37
- {
38
- label: "サンプル2",
39
- data: data.sample2,
40
- yAxisID: "leftNumberOfPeopleYaxis"
41
- },
42
- {
43
- label: "サンプル3",
44
- data: data.sample3,
45
- yAxisID: "leftNumberOfPeopleYaxis"
46
- },
47
- {
48
- label: "サンプル4",
49
- data: data.sample4,
50
- yAxisID: "leftNumberOfPeopleYaxis"
51
- },
52
- ],
53
- };
54
- var ctx2 = document.getElementById("chart-line").getContext("2d");
55
- var myLineChart = new Chart(ctx2,{
56
- type: 'line',
57
- data: lineData,
58
- options: {
59
- legend: {
60
- display: false
61
- }
62
- },
63
- scales: {
64
- xAxes: [
65
- {
66
- ticks: {
67
- autoSkip: false,
68
- }
69
- }
70
- ],
71
- yAxes: [
72
- {
73
- id: 'leftNumberOfPeopleYaxis',
74
- type: 'linear',
75
- position: 'left',
76
- scaleLabel: {
77
- display: true,
78
- labelString: 'アクセス数',
79
- },
80
- ticks: {
81
- beginAtZero: true,
82
- callback: function(value) {if (value % 1 === 0) {return value;}}
83
- }
84
- },
85
- {
86
- id: 'rightTimeYaxis',
87
- type: 'linear',
88
- position: 'right',
89
- scaleLabel: {
90
- display: true,
91
- labelString: '待機時間',
92
- },
93
- ticks: {
94
- beginAtZero: true,
95
- callback: function(value) {if (value % 1 === 0) {return value;}}
96
- }
97
- },
98
- ]
99
- }
100
- }
101
- });
60
+ //表示するグラフ選択
61
+ var select_1 = document.querySelector('[name="category_1"]');
62
+ select_1.addEventListener('change',() =>{
63
+ for(var i = 0; i < select_1.length; i++) {
64
+ try{
65
+ var meta_1 = myChart.getDatasetMeta(i);
66
+ if(select_1[i].selected) meta_1.hidden = false;
67
+ else meta_1.hidden = true;
68
+ }catch(e){
69
+ }
70
+ }
71
+ myChart.update();
72
+ });
73
+ var select_2 = document.querySelector('[name="category_2"]');
74
+ select_2.addEventListener('change',() =>{
75
+ for(var i = 0; i < select_2.length; i++) {
76
+ try{
77
+ var meta_2 = myChart.getDatasetMeta(i);
78
+ if(select_2[i].selected) meta_2.hidden = false;
79
+ else meta_2.hidden = true;
80
+ }catch(e){
81
+ }
82
+ }
83
+ myChart.update();
84
+ });
85
+ var select_3 = document.querySelector('[name="category_3"]');
86
+ select_3.addEventListener('change',() =>{
87
+ for(var i = 0; i < select_3.length; i++) {
88
+ try{
89
+ var meta_3 = myChart.getDatasetMeta(i);
90
+ if(select_3[i].selected) meta_3.hidden = false;
91
+ else meta_3.hidden = true;
92
+ }catch(e){
93
+ }
94
+ }
95
+ myChart.update();
96
+ });
97
+
98
+ //グラフ初期表示
99
+ var myChart = new Chart(ctx,myChart());
100
+ document.getElementById('chart-legends').innerHTML = myChart.generateLegend();
102
101
  ```