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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

23462閲覧

Cannot read property 'getContext' of nullの解決方法

Batoh33789

総合スコア136

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2018/02/07 01:07

お世話になります。

初歩的な質問で申し訳御座いません。
googleで検索して20件ほど確認したものの解決に至らなかったため質問させてください。

目的
Chart.jsを使って折れ線グラフを表示したい

動作環境
Chrome(ver.64.0.3282.140)64bit
Chart.js(Version: 2.7.1)
Windows 7 Pro

前提
Chart.bundle.min.jsはhtmlファイルと同一フォルダにある
Test.jsはhtmlファイルと同一フォルダにある

試してみたこと
Chart.bundle.min.jsをChart.min.jsにしても同様のエラーが出る
Chart.bundle.min.jsをChart.jsにしても同様のエラーが出る

コード

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<script src="Chart.bundle.min.js"></script> 6<script src="Test.js"></script> 7<title>グラフテスト</title> 8</head> 9<body> 10<canvas id="myChart"></canvas> 11</body> 12</html>

JavaScript

1var ctx = document.getElementById('myChart').getContext('2d'); 2var myChart = new Chart(ctx, { 3 type: 'line', 4 data: { 5 labels: ['M', 'T', 'W', 'T', 'F', 'S', 'S'], 6 datasets: [{ 7 label: 'apples', 8 data: [12, 19, 3, 17, 6, 3, 7], 9 backgroundColor: "rgba(153,255,51,0.4)" 10 }, { 11 label: 'oranges', 12 data: [2, 29, 5, 5, 2, 3, 10], 13 backgroundColor: "rgba(255,153,0,0.4)" 14 }] 15 } 16});

エラーメッセージ

Cannot read property 'getContext' of null

googleで検索してみると、canvasのidが設定されていない、というのが見つかりますが
上記にもある通り、idは正しく設定されています。

お手数おかけしますが、よろしくお願いします。
以上です。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Test.jsを冒頭で読み込んでいるために、JavaScriptの実行段階ではまだ<body>以下のDOM構築が進んでおらず、document.getElementById('myChart')で探すエレメントはまだ存在していません。

対策法としては2つ考えられます。

  • Test.jsの読み込みを<body>のいちばん下に回す
  • document.addEventListener('DOMContentLoaded')で、DOM構築後に動くように仕掛ける

投稿2018/02/07 01:17

maisumakun

総合スコア145121

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

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

Batoh33789

2018/02/07 02:18

なるほど! どちらの方法でも動作することを確認しましたが、今回は下の方の方法で実装したいと思います。 わかりやすい説明有難うございました。
guest

0

Test.jsを読み込む位置が良くないです。</body>の後に移動してください。これはjavascriptが読み込まれ、実行するタイミングに関係しています。

投稿2018/02/07 01:28

unz.hori

総合スコア1057

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

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

maisumakun

2018/02/07 01:34

文法上、<html>の中身は<head>と<body>だけなので、</body>より外側に出すのはあまりよろしくないです。
unz.hori

2018/02/07 01:35

あー、すいません。ちょっと試してみてそれで上手くいったので回答してしまいました。
Batoh33789

2018/02/07 02:19

回答有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問