質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2475閲覧

chart.jsでキャッシュが残ってしまう。

khiro

総合スコア43

Chart.js

Chart.jsは、多様なグラフを組み込めるJavaScriptのライブラリ。折れ線グラフや棒グラフ、円グラフ、レーダーチャートなどのグラフの種類が用意されています。HTML5のCanvasを用いて描画され、マークアップも分かりやすく、簡単に編集することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/05/14 14:46

前提・実現したいこと

chart.jsを使用して、グラフ作成をしています。
2回目にグラフを表示した時に、1回目の履歴が残らないようにしたいです。

発生している問題・エラーメッセージ

2回目のグラフが表示された時に、グラフの少し上でマウスを動かすと1回目のグラフが出てきてしまいます。

▼ デモサイト
https://ki-hi-ro.com/sample/chart-js__for-ask/

■ 使用例
1回目は、数値1に1、数値2に2を入力し、ボタンを押してグラフを出現させる。
画面をリロードせずに、数値1に5、数値2に10を入力して、再度ボタンを押す。
出てきたグラフの少し上でマウスを動かすと、1回目のグラフが出てきてしまう。

該当のソースコード

HTML

1<div class="main__content__primary__input"> 2 <div class="input__inner"> 3 <p>数値1</p> 4 <input class="number1"> 5 <p>数値2</p> 6 <input class="number2"> 7 <button class="complete-btn" style="display: block;">ボタン</button> 8 </div> 9</div> 10<div class="main__content__primary__output-after" style="position:relative;display:none;"> 11 <div style="position: absolute; left:330px; bottom:-370px; height: 400px; width: 300px;"> 12 <canvas id="myChart"></canvas> 13 </div> 14</div>

jQuery

1$(function(){ 2 $('.complete-btn').click(function(){ 3 $('.main__content__primary__output-after').css('display','flex'); 4 if (!clickNumber) { 5 var clickNumber = 0; 6 } 7 if (clickNumber == 1) { 8 myChart.destroy(); 9 myChartRight.destroy(); 10 } 11 if (clickNumber == 0) { 12 clickNumber += 1; 13 } 14 var plugin = { 15 afterDatasetsDraw: function (chart, easing) { 16 var ctx = chart.ctx; 17 18 chart.data.datasets.forEach(function (dataset, i) { 19 var meta = chart.getDatasetMeta(i); 20 if (!meta.hidden) { 21 meta.data.forEach(function (element, index) { 22 ctx.fillStyle = '#fff'; 23 24 var fontSize = 16; 25 var fontStyle = 'normal'; 26 var fontFamily = 'Helvetica Neue'; 27 ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily); 28 29 var dataString = dataset.data[index].toLocaleString(); 30 var dataText = dataset.label[index]; 31 32 ctx.textAlign = 'left'; 33 ctx.textBaseline = 'hanging'; 34 35 var padding = 5; 36 var position = element.tooltipPosition(); 37 ctx.fillText(dataString, position.x + 80, position.y - (fontSize / 4) - padding + 20); 38 ctx.fillText(dataText, position.x - 100 , position.y - (fontSize / 4) - padding + 20); 39 40 }); 41 } 42 }); 43 } 44 } 45 var number1 = $('.number1').val(); 46 var number2 = $('.number2').val(); 47 48 var type = 'bar'; 49 var data = { 50 labels: [""], 51 datasets: [ 52 { 53 label: ["数値1"], 54 backgroundColor: "rgba(0,0,0,.4)", 55 data: [Number(number1)] 56 }, 57 { 58 label: ["数値2"], 59 backgroundColor: "rgba(0,0,0,.3)", 60 data: [Number(number2)] 61 } 62 ] 63 }; 64 65 var options = { 66 maintainAspectRatio: false, 67 title: { 68 display: false, 69 text: '' 70 }, 71 scales: { 72 xAxes: [{ 73 stacked: true, 74 display: false 75 }], 76 yAxes: [{ 77 stacked: true, 78 display: false 79 }] 80 }, 81 legend: { 82 display: false 83 }, 84 tooltips: { 85 enabled: false, 86 position: 'customMode', 87 }, 88 }; 89 var ctx = document.getElementById("myChart").getContext('2d'); 90 ctx.canvas.height = 525; 91 window.myChart = new Chart(ctx, { 92 plugins: [plugin], 93 type: type, 94 data: data, 95 options: options 96 }); 97 }); 98})

試したこと

https://qiita.com/saka212/items/5714fa68deb44a185ec3
この記事を参考にして、1回目のグラフを消去しようとしました。

▼ グラフのインスタンスをグローバル変数で生成

HTML

1window.myChart = new Chart(ctx, { 2 plugins: [plugin], 3 type: type, 4 data: data, 5 options: options 6});

▼ 2回目以降の時に以前のグラフを削除する処理

jQuery

1if (!clickNumber) { 2 var clickNumber = 0; 3} 4if (clickNumber == 1) { 5 myChart.destroy(); 6} 7if (clickNumber == 0) { 8 clickNumber += 1; 9}

補足情報

chart.jsのCDNは、bodyタグの直前で読み込みました。

HTML

1<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.js"></script> 2</body>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://teratail.com/questions/239336
こちらの通りに書き直してみたら解決しました。

投稿2020/05/15 02:15

khiro

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問