JS脚本返回NaN

JS Script Returns NaN

本文关键字:NaN 返回 脚本 JS      更新时间:2024-03-31

我在NaN-不是数字方面遇到问题。我在这里查看了多个网络资源和几个问题,试图找到解决方案,但都没有奏效。任何想法:

var cur_lv = 1;
var newscount = document.getElementById("newscount").value;
var btn_up = document.getElementById("btn_up");
var btn_down = document.getElementById("btn_down");
function setButtons() {
    if (cur_lv == 1) {
        btn_up.onmouseover = function() {
            btn_up.setAttribute("src", "/img/arror_state_2.jpg");
        };
        btn_up.onmouseout = function() {
            btn_up.setAttribute("src", "/img/arror_state_2.jpg");
        };
        btn_down.onmouseover = function() {
            btn_down.setAttribute("src", "/img/arror_state_4.jpg");
        };
        btn_down.onmouseout = function() {
            btn_down.setAttribute("src", "/img/arror_state_3.jpg");
        };
    } else if (cur_lv < newsount) {
        btn_up.onmouseover = function() {
            btn_up.setAttribute("src", "/img/arror_state_2.jpg");
        };
        btn_up.onmouseout = function() {
            btn_up.setAttribute("src", "/img/arror_state_1.jpg");
        };
        btn_down.onmouseover = function() {
            btn_down.setAttribute("src", "/img/arror_state_4.jpg");
        };
        btn_down.onmouseout = function() {
            btn_down.setAttribute("src", "/img/arror_state_3.jpg");
        };
    } else if (cur_lv = newscount) {
        btn_up.onmouseover = function() {
            btn_up.setAttribute("src", "/img/arror_state_2.jpg");
        };
        btn_up.onmouseout = function() {
            btn_up.setAttribute("src", "/img/arror_state_1.jpg");
        };
        btn_down.onmouseover = function() {
            btn_down.setAttribute("src", "/img/arror_state_4.jpg");
        };
        btn_down.onmouseout = function() {
            btn_down.setAttribute("src", "/img/arror_state_4.jpg");
        };
    };
};
setButtons();
$(document).ready(function() {
    $("#btn_up").click(function() {
        var cur_lv = cur_lv - 1;
        setButtons();
        alert(cur_lv);
        alert(newscount);
    });
    $("#btn_down").click(function() {
        var cur_lv = cur_lv + 1;
        setButtons();
        alert(cur_lv);
        alert(newscount);
    });
});

正如我所说,我查看了很多资源,但都无法修复。我尝试过parseInt(),但无论我把它放在哪里,都无济于事。

您有一个范围问题,这就是发生的情况:

  1. 您将cur_lv声明为1[第2行](因为它不在函数内部,所以cur_lv将是一个全局变量)
  2. #btn_up#btn_downclick函数中,您正在声明一个具有局部作用域的新变量(var语句表示您正在声明局部变量)
  3. 单击#btn_up#btn_down时,将在本地范围内创建一个新变量(cur_lv),其值为undefined。接下来,您将cur_lv - 1归因于cur_lv,JavaScript将在算术运算中将undefined转换为NaN,因此NaN - 1也是NaN,这就是它返回Nan的原因

解决方案是在#btn_up#btn_downclick函数中删除语句var,这样就可以引用全局cur_lv(在第2行声明)。

[更新]

你的代码也有一些其他问题:

  1. 正如@Pevara所说,你的第一个else-if(JS Script返回NaN)中有一个拼写错误
  2. 在另一个例子中,如果你将newscount归因于cur_lv,而不是比较它们(使用=====
  3. 根据您放置<script>标记的位置,您的代码将找不到某些元素:例如:`var bt=document.getElementById('button');我的真棒按钮 bt will be undefined, because the script will run before the button exists in page. To resolve this issue, you can add code inside$(document).ready(function(){`,此函数中的代码只有在文档准备好后才会运行(它包括这个小按钮)

尝试修复列出的问题,并将代码(从var cur_lv = 1;移动到setButtons();)移到$(document).ready(function() {中。此外,您可以使用浏览器中的开发工具来帮助您发现一些错误。

希望它能有所帮助!

问题是这个代码:

var cur_lv = cur_lv - 1;

它会创建一个局部变量,使全局变量处于阴影中。赋值的右侧也使用局部变量,因此表达式的值为undefined - 1undefined将被转换为可以在减法中使用的数值,该数值为NaN。CCD_ 38的结果是CCD_。

代码应该是:

cur_lv = cur_lv - 1;