web-dev-qa-db-fra.com

Uncaught TypeError: Impossible de lire la propriété 'offsetWidth' de undefined - chart.js

J'ai ce simple HTML:

<canvas id="myChart" width="400" height="400"></canvas>

et ce js:

var ctx = document.getElementById("myChart");

    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
            datasets: [{
                label: '# of Votes',
                data: [12, 19, 3, 5, 2, 3],
                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)',
                    'rgba(75, 192, 192, 0.2)',
                    'rgba(153, 102, 255, 0.2)',
                    'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                    'rgba(255,99,132,1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                    'rgba(75, 192, 192, 1)',
                    'rgba(153, 102, 255, 1)',
                    'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero: true
                    }
                }]
            }
        }
    });

Même si le canevas est configuré avec myChart id, j'obtiens le message d'erreur suivant:

Uncaught TypeError: Cannot read property 'offsetWidth' of undefined

JSFiddle: https://jsfiddle.net/kroejrhx/

12
ohadinho

Après avoir revisité la question, voici votre problème: vous utilisez la mauvaise version de chart.js. Selon cette section , si vous souhaitez utiliser un axe basé sur le temps, vous devez explicitement inclure moment.js ou utiliser la version de l'ensemble. 

Changer la ressource dans votre jsfiddle en https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.4/Chart.bundle.min.js affichera le graphique attendu. Pas besoin de changer le code du tout.

31

Si vous voulez utiliser Chart.js v2.0, alors ce CDN fonctionnera.

https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.3/Chart.bundle.min.js

4
user3094755

Vous devez utiliser la version 2 de chart.js. Si vous utilisez npm , dans votre package.json, mettez à jour chart.js, par exemple, "chart.js": "^2.1.1",. Si vous utilisez react-chartjs-2 , vous devez toujours vous assurer que votre chart.js version est supérieure ou égale à 2.

0