【问题标题】:Can't figure out what's wrong in my Javascript code无法弄清楚我的 Javascript 代码有什么问题
【发布时间】:2017-07-28 19:08:19
【问题描述】:

无法弄清楚为什么我的 Javascript 代码无法运行以显示字母等级并更改背景颜色。我是新手,但我认为我做对了……有什么想法吗?

  1. 在表格左下角的单元格中写入数字等级。
  2. 以及表格右下角单元格中的相关字母等级。 (对于这个问题,使用:A >= 90 > B >= 80 > C >= 70 > D >= 60 > F)
  3. 如果成绩通过,字母成绩单元格的背景颜色将变为绿色。如果成绩不及格,字母成绩单元格的背景颜色应变为红色。

<!DOCTYPE html>
<html lang="en">

<head>
  <title>Lab11aKL.html</title>
  <meta charset="utf-8">

  <style>

  </style>
  <script>
    function addNumbers() {
      var t1 = document.getElementById("t1");
      var t2 = document.getElementById("t2");
      var t3 = document.getElementById("t3");
      var t4 = document.getElementById("t4");
      var t5 = document.getElementById("t5");
      var t6 = document.getElementById("t6");

      answer.value = parseFloat(t1.value * .20) + parseFloat(t2.value * .20) +
        parseFloat(t3.value * .30) + parseFloat(t4.value * .125) +
        parseFloat(t5.value * .125) + parseFloat(t6.value * .05);
    }

    function gradeLetter() {
      var t1 = document.getElementById("t1");
      var t2 = document.getElementById("t2");
      var t3 = document.getElementById("t3");
      var t4 = document.getElementById("t4");
      var t5 = document.getElementById("t5");
      var t6 = document.getElementById("t6");

      var ct1 = parseFloat(t1.value * .20);
      var ct2 = parseFloat(t2.value * .20);
      var ct3 = parseFloat(t3.value * .30)
      var ct4 = parseFloat(t4.value * .125);
      var ct5 = parseFloat(t4.value * .125);
      var ct6 = parseFloat(t6.value * .05);

      if (answer >= 90 > ) {
        answergrade = 'A';
        document.getElementById("answergrade").style.backgroundColor =
          'green';
      } else if (answer >= 80 > ) {
        answergrade = 'B';
        document.getElementById("answergrade").style.backgroundColor =
          'green';
      } else if (answer >= 70 > ) {
        answergrade = 'C';
        document.getElementById("answergrade").style.backgroundColor =
          'green';
      } else if (answer >= 60 > ) {
        answergrade = 'D';
        document.getElementById("answergrade").style.backgroundColor =
          'green';
      } else(answer < 60) {
        answergrade = 'F';
        document.getElementById("answergrade").style.backgroundColor =
          'red';
      }
    }
  </script>


</head>

<body>

  <form name="tform" id="tform">
    <table>
      <tr>
        <th></th>
        <th>Score</th>
      </tr>
      <tr>
        <td>Test 1</td>
        <td><input type="text" name="t1" id="t1" /></td>
      </tr>
      <tr>
        <td>Test 2</td>
        <td><input type="text" name="t2" id="t2" /></td>
      </tr>
      <td>Final Exam</td>
      <td><input type="text" name="t3" id="t3" /></td>
      </tr>
      <td>Labs</td>
      <td><input type="text" name="t4" id="t4" /></td>
      </tr>
      <td>Project</td>
      <td><input type="text" name="t5" id="t5" /></td>
      </tr>
      <td>Quizzes</td>
      <td><input type="text" name="t6" id="t6" /></td>
      </tr>
      <tr>

        <th colspan="2">
          <input type="button" name="b1" id="b1" value="Calculate Grade" onclick="addNumbers(); gradeLetter()" />
        </th>
      </tr>
      <tr>
        <td><input type="text" name="answer" id="answer" /></td>
        <td><input type="text" name="answergrade" id="answergrade" /></td>
      </tr>

    </table>

  </form>
</body>

</html>

【问题讨论】:

  • 我在任何地方都看不到答案的变量。
  • 什么不起作用?正在发生什么,它与您试图达到的结果有何不同?此外,您的标题应该是问题的简短摘要 - 目前您的标题可能适用于任何 JavaScript 问题
  • 了解如何提出问题: 1. 你期望它做什么或不做什么? 2. 您检查浏览器控制台是否有错误?如果有,有吗? 3.设置一个jsFiddle或者一个我们可以运行的代码sn-p,这样我们就不用完全按照我们自己的方式重新创建情况了。
  • 您的 javascript 中有语法错误。了解如何使用浏览器的开发者控制台对其进行故障排除。
  • 使用数组来存储值,并使用一些迭代方法来读取它们,你所拥有的是......糟糕......

标签: javascript html css


【解决方案1】:

您的问题是缺少值。看看 if/else 子句

else if (answer >=70 >{??})

javascript 中没有 x>a>y 类型的比较。

【讨论】:

  • 但是..但是..但是..应该有。需要更少的代码:)
  • 以后,请考虑对离题的问题隐瞒答案。每个元:"If the question is (...) off topic on all SE sites: Don't answer the question"。此外,您可能会面临被否决的风险,因为礼仪规定answers on off-topic questions get downvoted。它鼓励不良的提问习惯。
  • @Santi 我不确定我是否在关注。为什么这是一个离题的问题?
  • "What's on topic?": “要求家庭作业帮助的问题必须包括对您解决它的困难的描述。” | “寻求调试帮助的问题必须包括特定的问题或错误......以及重现它所需的最短代码” | “关于由简单的印刷错误是题外话”...等
【解决方案2】:

这里有几个问题。

  1. 您没有在 addNumbers() 函数中引用的 answer 定义变量。
  2. 您在addNumbers() 中设置answer.value,然后在gradeLetter() 函数中的所有条件句中与answer 进行比较。
  3. t1 到 t6 在 HTML 中没有值。
  4. gradeLetter() 中计算的answergrade 未写入该HTML 元素
  5. 您的条件定义不正确
  6. 你不能有else (condition){//condition is true execute this stuff},它只是else{//execute this code automatically}。如果在第一个 if 语句之后有条件,请使用 else if (condition){//condition is true execute this stuff}

请参阅下面的代码,它应该可以让你指出正确的方向。

<!DOCTYPE html>
<html lang="en">
<head>
<title>Lab11aKL.html</title>
<meta charset="utf-8">

<style>
</style>
<script>
var answer;

function addNumbers()
{
    var t1 = document.getElementById("t1");
    var t2 = document.getElementById("t2");
    var t3 = document.getElementById("t3");
    var t4 = document.getElementById("t4");
    var t5 = document.getElementById("t5");
    var t6 = document.getElementById("t6");

    answer = parseFloat(t1.value * .20) + parseFloat(t2.value * .20) + 
    parseFloat(t3.value * .30) + parseFloat(t4.value * .125) + 
    parseFloat(t5.value * .125) + parseFloat(t6.value * .05);
}

function gradeLetter()
{
var t1 = document.getElementById("t1");
var t2 = document.getElementById("t2");
var t3 = document.getElementById("t3");
var t4 = document.getElementById("t4");
var t5 = document.getElementById("t5");
var t6 = document.getElementById("t6");

var ct1 = parseFloat(t1.value * .20);
var ct2 = parseFloat(t2.value * .20);
var ct3 = parseFloat(t3.value * .30) 
var ct4 = parseFloat(t4.value * .125);
var ct5 = parseFloat(t4.value * .125);
var ct6 = parseFloat(t6.value * .05);

        if (answer >=90)
            {
            answergrade = 'A';
            document.getElementById ("answergrade").style.backgroundColor = 
'green';
            }
        else if (answer >=80)
            {
            answergrade = 'B';
            document.getElementById ("answergrade").style.backgroundColor = 
'green';
            }
        else if (answer >=70)
            {
            answergrade = 'C';
            document.getElementById ("answergrade").style.backgroundColor = 
'green';
            }
        else if (answer >=60)
            {
            answergrade = 'D';
            document.getElementById ("answergrade").style.backgroundColor = 
'green';
            }
        else if (answer <60)
            {
            answergrade = 'F';
            document.getElementById ("answergrade").style.backgroundColor =         
'red';
            }
var answerElem = document.getElementById('answergrade')
answerElem.innerText = answergrade;
}
</script>


</head>
<body>

<form name="tform" id="tform">
<table>
    <tr>
        <th></th>
        <th>Score</th>
    </tr>
    <tr>
        <td>Test 1</td>
        <td><input type="text" name="t1" id="t1"/>10</td>
    </tr>
    <tr>
        <td>Test 2</td>
        <td><input type="text" name="t2" id="t2"/>50</td>
    </tr>
        <td>Final Exam</td>
        <td><input type="text" name="t3" id="t3"/>100</td>
    </tr>
        <td>Labs</td>
        <td><input type="text" name="t4" id="t4"/>90</td>
    </tr>
        <td>Project</td>
        <td><input type="text" name="t5" id="t5"/>70</td>
    </tr>
        <td>Quizzes</td>
        <td><input type="text" name="t6" id="t6"/>85</td>
    </tr>
    <tr>

        <th colspan="2">
        <input type="button" name="b1" id="b1"
        value="Calculate Grade"
        onclick="addNumbers(); gradeLetter()"/>
        </th>
    </tr>
    <tr>
        <td><input type="text" name="answer" id="answer"/></td>
        <td><input type="text" name="answergrade" id="answergrade"/></td>
    </tr>

</table>

</form>
</body>
</html>

【讨论】:

    【解决方案3】:

    有几个问题。如果您使用浏览器的开发人员控制台进行故障排除,其中一些是清晰可见的。如果您要编写 javascript,则必须学习如何使用控制台。

    下面是一个工作的sn-p。运行它以查看它的工作。

    我在下面的代码中注释了各种问题(就在固定代码之前)。

    function addNumbers() {
      var t1 = document.getElementById( "t1" );
      var t2 = document.getElementById( "t2" );
      var t3 = document.getElementById( "t3" );
      var t4 = document.getElementById( "t4" );
      var t5 = document.getElementById( "t5" );
      var t6 = document.getElementById( "t6" );
      var answer = document.getElementById('answer');
    
      answer.value = parseFloat( t1.value * .20 ) + parseFloat( t2.value * .20 ) +
        parseFloat( t3.value * .30 ) + parseFloat( t4.value * .125 ) +
        parseFloat( t5.value * .125 ) + parseFloat( t6.value * .05 );
    }
    
    function gradeLetter() {
      // you weren't getting the value for "answer"
      // the + casts this to a number, so the comparisons work properly
      var answer = +document.getElementById('answer').value;
      
      var t1 = document.getElementById( "t1" );
      var t2 = document.getElementById( "t2" );
      var t3 = document.getElementById( "t3" );
      var t4 = document.getElementById( "t4" );
      var t5 = document.getElementById( "t5" );
      var t6 = document.getElementById( "t6" );
    
      var ct1 = parseFloat( t1.value * .20 );
      var ct2 = parseFloat( t2.value * .20 );
      var ct3 = parseFloat( t3.value * .30 )
      var ct4 = parseFloat( t4.value * .125 );
      var ct5 = parseFloat( t4.value * .125 );
      var ct6 = parseFloat( t6.value * .05 );
    
      // This is incorrect and causes a syntax error
      // if ( answer >= 90 > ) {
      if ( answer >= 90 ) {
        answergrade                                                    = 'A';
        document.getElementById( "answergrade" ).style.backgroundColor =
          'green';
      }
      else if ( answer >= 80 ) {
        answergrade                                                    = 'B';
        document.getElementById( "answergrade" ).style.backgroundColor =
          'green';
      }
      else if ( answer >= 70 ) {
        answergrade                                                    = 'C';
        document.getElementById( "answergrade" ).style.backgroundColor =
          'green';
      }
      else if ( answer >= 60 ) {
        answergrade                                                    = 'D';
        document.getElementById( "answergrade" ).style.backgroundColor =
          'green';
      }
      else if (answer < 60)
      {
        answergrade                                                    = 'F';
        document.getElementById( "answergrade" ).style.backgroundColor =
          'red';
      }
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>Lab11aKL.html</title>
    <meta charset="utf-8">
    
    <style>
    </style>
    
    
    </head>
    <body>
    
    <form name="tform" id="tform">
    <table>
        <tr>
            <th></th>
            <th>Score</th>
        </tr>
        <tr>
            <td>Test 1</td>
            <td><input type="text" name="t1" id="t1"/></td>
        </tr>
        <tr>
            <td>Test 2</td>
            <td><input type="text" name="t2" id="t2"/></td>
        </tr>
            <td>Final Exam</td>
            <td><input type="text" name="t3" id="t3"/></td>
        </tr>
            <td>Labs</td>
            <td><input type="text" name="t4" id="t4"/></td>
        </tr>
            <td>Project</td>
            <td><input type="text" name="t5" id="t5"/></td>
        </tr>
            <td>Quizzes</td>
            <td><input type="text" name="t6" id="t6"/></td>
        </tr>
        <tr>
    
            <th colspan="2">
            <input type="button" name="b1" id="b1"
            value="Calculate Grade"
            onclick="addNumbers(); gradeLetter()"/>
            </th>
        </tr>
        <tr>
            <td><input type="text" name="answer" id="answer"/></td>
            <td><input type="text" name="answergrade" id="answergrade"/></td>
        </tr>
    
    </table>
    
    </form>
    </body>
    </html>

    【讨论】:

      【解决方案4】:

      如果和如果其他条件关闭你:

      if (answer >=90 >){
              answergrade = 'A';
              document.getElementById ("answergrade").style.backgroundColor = 
              'green';
      }
      

      应该是

       if (answer >=90){
               answergrade = 'A';
               document.getElementById ("answergrade").style.backgroundColor = ` 
               'green';
       }
      

      if else 条件也需要关闭

      if (answer >=80){
              answergrade = 'B';
              document.getElementById ("answergrade").style.backgroundColor = 
              'green';
       }
      

      应该是

      if (answer >=80 && answer < 90){
             answergrade = 'B';
             document.getElementById ("answergrade").style.backgroundColor = 
             'green';
       }
      

      【讨论】:

      • 这些被称为条件,而不是循环
      • if (answer &gt;=90 &gt;)..., if (answer &gt;=80 &gt;)...?
      • @Kentuckiansmilo 的基本概念是这样的,是的
      • @Kentuckiansmilo 整体逻辑结构也是正确的。无需测试 answer >= 80 && answer
      • @Santi 您只是在这些情况下说明答案大于或等于 90,然后只是大于没有声明声明的变量。此值“&&”表示“与”。这个值“||”表示“或”这个值,但是对于你拥有的任何运算符,你必须有一个值来比较。
      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 2018-05-16
      • 2012-03-15
      • 2018-01-15
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多