【问题标题】:Getting an NaN error - Javascript出现 NaN 错误 - Javascript
【发布时间】:2017-01-01 08:29:19
【问题描述】:

我的总成绩出现NaN 错误。有人可以帮我找出这个错误的原因吗?或者给我一些想法如何解决这个问题?我只是 javascript 和 web 开发的新手。对不起我的代码逻辑..

这是我的代码。

              function Calculate(){
                var term = $("#term").val();
                var fac_code = $("#faculty_code").val();
            $.ajax({    
              type: 'POST',                                  
              url: 'getrecords.php',                        
              data: {
                "done": 1,
                "term": term,
                "fac_code": fac_code

              },                       
              dataType: 'json',                  
              success: function(data)         
              {
                var major = data[3];              
                var quizzes = data[4];    
                var homework = data[5];      
                var attendance = data[6]; 
                var laboratory = data[7];  
                var activity = data[8];  
                var recitation = data[9];


              var q = +(document.getElementById('quiz').textContent);
              var a = +(document.getElementById('atten').textContent);
              var h = +(document.getElementById('home').textContent);
              var r = +(document.getElementById('reci').textContent);
              var m = +(document.getElementById('me').textContent);
              var ac = +(document.getElementById('activityy').textContent);
              var l = +(document.getElementById('laboratory').textContent);

              var ma = $('.me');
              var qui = $('.quize');
              var homesea = $('.hos');
              var re = $('.recits');
              var laborat = $('.labo');
              var activit = $('.activity');
              var attenda = $('.atte');

              var MisVisible = ma.is(':visible');
              var QisVisible = qui.is(':visible');
              var HisVisible = homesea.is(':visible');
              var RisVisible = re.is(':visible');
              var LisVisible = laborat.is(':visible');
              var AisVisible = activit.is(':visible');
              var ATisVisible = attenda.is(':visible');

                var mt;
                var qt;
                var ht;
                var rt;
                var act;
                var lt;
                var att;

                if (MisVisible === true) {

                  mt = m / 100 * 50 + 50;

                } 
                if (QisVisible === true){

                 qt = q / 100 * 50 + 50;

                }
                if(HisVisible === true){

                 ht = h / 100 * 50 + 50;

                }
                if(RisVisible === true){

                  rt = r / 100 * 50 + 50;
                }
                if(LisVisible === true){

                  lt = l / 100 * 50 + 50;   
                }
                if(AisVisible === true){

                  act = ac / 100 * 50 + 50;

                }
                if(ATisVisible === true){

                    att = a / 100 * 50 + 50;
                }




                  mtt = mt * (major * 0.01);
                  qtt = qt * (quizzes * 0.01);
                  attt = att * (attendance * 0.01);
                  htt = ht * (homework * 0.01);
                  rtt = rt * (recitation * 0.01);
                  actt = act * (activity * 0.01);
                  ltt = lt * (laboratory * 0.01);

          var grade = mtt + qtt + attt + htt + rtt + actt + ltt;

          document.getElementById('td_grade').innerHTML = grade;




              } 
            });
        }

【问题讨论】:

  • Javascript 是严格类型的。来自 html 的东西可以是一个字符串。使用 parseInt 或 parseFloat 确保一定数量。
  • NaN 表示非数字,如果您获得所需的值,请务必检查所有变量。你可以使用 console.log(variable_name) 来观察你的变量。
  • @jomsk1e 先生,我应该把那个放在哪里?
  • 你可以把它放在任何一行来检查你的变量的当前值,例如:mtt = mt * (major*0.01);console.log(mtt);并通过按 f12 并单击控制台选项卡来使用 chrome 的开发工具。

标签: javascript ajax


【解决方案1】:

最好的答案是知道如何使用开发工具源窗格。在代码中放置断点,然后开始单步执行代码以查看值。

如果我大胆猜测,其中之一是 undefined 或缺失。

var major = data[3];              
var quizzes = data[4];    
var homework = data[5];      
var attendance = data[6]; 
var laboratory = data[7];  
var activity = data[8];  
var recitation = data[9];

或者其中之一不能被一元 + 正确解析为数字

var q = +(document.getElementById('quiz').textContent);
var a = +(document.getElementById('atten').textContent);
var h = +(document.getElementById('home').textContent);
var r = +(document.getElementById('reci').textContent);
var m = +(document.getElementById('me').textContent);
var ac = +(document.getElementById('activityy').textContent);
var l = +(document.getElementById('laboratory').textContent);

【讨论】:

  • 我会检查数据。
  • json 数据先生没有丢失或未定义。
【解决方案2】:

按 F12 使用 Chrome 的开发工具并转到控制台选项卡,以检查您可以使用的任何变量:

console.log(variable_name);

此外,您的 HTML 值可能不是 int 形式,因此您不应使用一元加号来获取值,而是使用它来检查您的值是否正确:

if (!isNaN(parseFloat("10000")){
    //do something
}

【讨论】:

  • 问题是if (MisVisible === true)这个说法。我把它改成0,结果是没有NaN..
  • 在这种情况下,您可以在该条件下添加 else:else { mt = 0; } 这样您就可以确定 mt 在您的计算中使用它时会有一个值。
猜你喜欢
  • 2013-06-22
  • 2013-06-15
  • 1970-01-01
  • 2014-08-03
  • 2016-06-27
  • 2014-04-30
  • 2017-02-06
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多