score:1

Accepted answer

you need to initialize all variables into the function of button click, instead of the outside that function.

what happening in your case is, all variables are loading only once when main.js is loading and at that time your input field's values will be blank. so, your all variables will be loaded with blank values, that's why the chart is blank.

check below code:

document.queryselector("button").addeventlistener("click", () => {
  let timespend = document.queryselector("#time_spend").value;
  let breaktime = document.queryselector("#break_time").value;
  let fsubject = document.queryselector("#first_subjects").value;
  let ssubject = document.queryselector("#second_subjects").value;
  let tsubject = document.queryselector("#third_subjects").value;
  let mostcon = document.queryselector("#first_percentage").value;
  let seccon = document.queryselector("#second_percentage").value;
  let thirdcon = document.queryselector("#third_percentage").value;

  let fsubjectv = (mostcon / 100) * (timespend + breaktime);
  let ssubjectv = (seccon / 100) * (timespend + breaktime);
  let tsubjectv = (thirdcon / 100) * (timespend + breaktime);

  const canvasele = document.createelement("canvas");
  canvasele.id = "mychart";
  let mychart = canvasele.getcontext("2d");
  const firstele = document.getelementsbyclassname("container")[0].children[0];
  if (firstele) {
    document
      .getelementsbyclassname("container")[0]
      .replacechild(canvasele, firstele);
  } else {
    document.getelementsbyclassname("container")[0].appendchilde(canvasele);
  }

  let piechart = new chart(mychart, {
    type: "pie",
    data: {
      labels: ["time spend", "break time", fsubject, ssubject, tsubject],
      datasets: [
        {
          label: "plan",
          data: [timespend, breaktime, mostcon, seccon, thirdcon],
          backgroundcolor: ["black", "red", "orange", "green", "blue"]
        }
      ]
    },
    options: {}
  });
});
.container{
  height:500px;
  width:500px;
}
<html lang="en">

<head>
  <meta charset="utf-8" />
  <meta http-equiv="x-ua-compatible" content="ie=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/chart.js/3.7.1/chart.min.js"></script>

  <link rel="stylesheet" href="css/main-style.css" />

  <title>student planner</title>
</head>

<body>
  <header>
    <div class="title">
      <h1>the student planner</h1>
    </div>
    <div class="sub_header">
      <h3>a simple planner to organise your time</h3>
      <h3>let's plan your session</h3>
    </div>
  </header>

  <main>
    <input type="number" id="time_spend" class="text-box" placeholder="how much time do you have?" />
    <input type="number" id="break_time" class="text-box" placeholder="how many breaks do you want to have?" />
    <br>
    
    <input type="text" id="first_subjects" class="subjects-box" placeholder="most confident subject?" />
    <input type="number" id="first_percentage" class="percantage_subject" placeholder="understand percentage ">
    
    
    <input type="text" id="second_subjects" class="subjects-box" placeholder="second confident subject?" />
    <input type="number" id="second_percentage" class="percantage_subject" placeholder="understand percentage ">
    
    
    <input type="text" id="third_subjects" class="subjects-box" placeholder="third subject?" /> 
    <input type="number" id="third_percentage" class="percantage_subject" placeholder="understand percentage ">
    <br>

    <button type="button" class="button">finished</button>

    <div class="container">
      <canvas id="mychart"></canvas>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/chart.js/3.7.1/chart.min.js"></script>
    <script src="js/main.js"></script>

  </main>

  <footer>
    <p>&copy; dk_code</p>
    <p>12/3/2022</p>
  </footer>
</body>

</html>


Related Query

More Query from same tag