简体   繁体   中英

Issue changing innerHTML of basic HTML/Javascript page

I have an HTML/Javascript document that outputs the grade of a student based on the inputs of my form. The mechanics of the grade calculation should be working, but the final output does not. The main thing I'm honing in on is the document.getElementById("span1").innerHTML and span2's same code. I want these to change the inner HTML to the values I calculated with my code, but they remain at X and yy even when I attempt to change them.

I think the error should be in my calculateGrade function or in my HTML. I did not include the rest of the code to simplify my post, so the error lay outside of where I think it does. I need the output paragraph to have the correct values, but they are not being changed.

Even if I change the new innerHTML values to concrete values such as P and 88 , the code displays X and yy instead. I set a default "A" and "91" to test it and receive the same problem. I think there may be an issue with my form gets as changing the value of the name in the form also doesn't change my final output.

This is my first Javascript/HTML project, and I'm very desperate to get it working. I'm already one day late, and in a couple hours, it will be two. I deeply appreciate any hep I can get. Thanks guys. Here is my code:

<!DOCTYPE html>
<html>

<head>
  <title>Joe Peterson's Assignment 7</title>
  <script>
    function calculateGrade(){
      document.getElementById("form1").style.display = "none";
      document.getElementById("p1").style.display = "block";
      alert(document.getElementById("FirstName").value);
      var fname = document.getElementById("LastName").value;
      var lname = document.getElementById("FirstName").value;
      var valMidterm = document.getElementById("MidtermScore").value;
      var valFinal = document.getElementById("FinalScore").value;
      var lMidterm = document.getElementById("MidtermLetter").value;
      var lFinal = document.getElementById("FinalLetter").value;
      var homeworkArray = document.getElementById("HomeworkScores").value.split(',');
      var classworkArray = document.getElementById("ActivityScores").value.split(',');

      var grade = "A";      
      var score = 91;

      document.getElementById("span1").innerHTML = (grade);
      document.getElementById("span2").innerHTML = (score);
      document.getElementById("fname").innerHTML = (fname);
      document.getElementById("lname").innerHTML = (lname);
      return false;
    }
    </script>
</head>

<body>
  <p><h1>Joe Peterson's Assignment 7</h1></p>
  <form name="input" id="form1" onsubmit="calculateGrade()" style="display:form">
    First name: <input type="text" name="FirstName" id="FirstName" value="Joe"><br>
    Last name: <input type="text" name="LastName" id="LastName" value="Peterson"><br>
    Homework Scores (separate with commas): <input type="text" name="HomeworkScores" id="HomeworkScores" value="90, 80, 98"><br>
    Activity Scores (separate with commas): <input type="text" name="ActivityScores" id="ActivityScores" value="71, 65, 96"><br>
    Midterm Exam Percentage: <input type="text" name="MidtermScore" id="MidtermScore" value="91"><br>
    Midterm Exam Letter Grade: <input type="text" name="MidtermLetter" id="MidtermLetter" value="A"><br>
    Final Exam Percentage: <input type="text" name="FinalScore" id="FinalScore" value="75"><br>
    Final Exam Letter Grade: <input type="text" name="FinalLetter" id="FinalLetter" value="C"><br>
    <input type="submit" value="Submit">
  </form> 

  <p id="p1" style="display:none">
    Final course grade for 
    <span id="fname">Joe</span> <span id="lname">Peterson</span> 
    is: <span id="span1">X</span> (<span id="span2">yy</span>%)
  </p>

</body>
</html>

Like this should be ok...I only change the input type to "button"

   <!DOCTYPE html>
<html>

<head>
  <title>Joe Peterson's Assignment 7</title>
  <script>
    function calculateGrade(){
      document.getElementById("form1").style.display = "none";

      alert(document.getElementById("FirstName").value);
      var fname = document.getElementById("LastName").value;
      var lname = document.getElementById("FirstName").value;
      var valMidterm = document.getElementById("MidtermScore").value;
      var valFinal = document.getElementById("FinalScore").value;
      var lMidterm = document.getElementById("MidtermLetter").value;
      var lFinal = document.getElementById("FinalLetter").value;
      var homeworkArray = document.getElementById("HomeworkScores").value.split(',');
      var classworkArray = document.getElementById("ActivityScores").value.split(',');

      var grade = "A";      
      var score = 91;

      document.getElementById("span1").innerHTML = (grade);
      document.getElementById("span2").innerHTML = (score);
      document.getElementById("fname").innerHTML = (fname);
      document.getElementById("lname").innerHTML = (lname);
      document.getElementById("p1").style.display = "block";
      return false;
    }
    </script>
</head>

<body>
  <p><h1>Joe Peterson's Assignment 7</h1></p>
  <form name="input" id="form1"style="display:form">
    First name: <input type="text" name="FirstName" id="FirstName" value="Joe"><br>
    Last name: <input type="text" name="LastName" id="LastName" value="Peterson"><br>
    Homework Scores (separate with commas): <input type="text" name="HomeworkScores" id="HomeworkScores" value="90, 80, 98"><br>
    Activity Scores (separate with commas): <input type="text" name="ActivityScores" id="ActivityScores" value="71, 65, 96"><br>
    Midterm Exam Percentage: <input type="text" name="MidtermScore" id="MidtermScore" value="91"><br>
    Midterm Exam Letter Grade: <input type="text" name="MidtermLetter" id="MidtermLetter" value="A"><br>
    Final Exam Percentage: <input type="text" name="FinalScore" id="FinalScore" value="75"><br>
    Final Exam Letter Grade: <input type="text" name="FinalLetter" id="FinalLetter" value="C"><br>
    <input type="button" value="Submit" onclick="calculateGrade()">
  </form> 

  <p id="p1" style="display:none">
    Final course grade for 
    <span id="fname">Joe</span> <span id="lname">Peterson</span> 
    is: <span id="span1">X</span> (<span id="span2">yy</span>%)
  </p>

</body>
</html>

Just move the alert call to the end of the function, and it will work finely:

function calculateGrade(){
  document.getElementById("form1").style.display = "none";
  document.getElementById("p1").style.display = "block";

  var fname = document.getElementById("LastName").value;
  var lname = document.getElementById("FirstName").value;
  var valMidterm = document.getElementById("MidtermScore").value;
  var valFinal = document.getElementById("FinalScore").value;
  var lMidterm = document.getElementById("MidtermLetter").value;
  var lFinal = document.getElementById("FinalLetter").value;
  var homeworkArray = document.getElementById("HomeworkScores").value.split(',');
  var classworkArray = document.getElementById("ActivityScores").value.split(',');

  var grade = "A";      
  var score = 91;

  document.getElementById("span1").innerHTML = grade;
  document.getElementById("span2").innerHTML = score;
  document.getElementById("fname").innerHTML = fname;
  document.getElementById("lname").innerHTML = lname;
  alert(document.getElementById("FirstName").value);

  return false;
}

And set your form action to return calculateGrade() as Patrick Evans mentioned in his comment.

here's a demo

And as

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM