JS脚本返回NaN

时间:2015-02-22 00:29:27

标签: javascript jquery variables var nan

我遇到NaN问题 - 不是数字。我在这里查看了多个Web资源和几个问题,试图找到解决方案,但没有一个能够工作。任何想法:

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()但是没有任何帮助 - 无论我把它放在哪里。

2 个答案:

答案 0 :(得分:1)

你有一个范围问题,这是正在发生的事情:

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

    解决方案是删除Nanvar的{​​{1}}函数中的语句click,这样就引用了全局#btn_up(声明了在第2行。)

    [更新]

    您的代码还有其他一些问题:

    1. 正如@Pevara所说,如果(JS Script Returns NaN),你的第一个错误就会出现错字。
    2. 如果您将#btn_down归因于cur_lv,而不是比较它们(使用newscountcur_lv),则在您的第二个其他地方。
    3. 根据您放置==标记的位置,您的代码将找不到一些元素: 例如: `     var bt = document.getElementById('button'); 我真棒按钮 === bt <script> $(document).ready(function(){`,此函数中的代码只会在文档准备好后运行(它包含这个小按钮)。
    4. 尝试修复列出的问题并在 内移动代码(从will be undefined, because the script will run before the button exists in page. To resolve this issue, you can add code insidevar cur_lv = 1;)。此外,您可以使用浏览器中的开发人员工具来帮助您发现错误。

      希望它有所帮助!

答案 1 :(得分:0)

问题是这段代码:

var cur_lv = cur_lv - 1;

它创建一个隐藏全局变量的局部变量。赋值的右侧也使用局部变量,因此表达式的值为undefined - 1undefined将转换为可在减法中使用的数值,该数值为NaNNaN - 1的结果是NaN

代码应为:

cur_lv = cur_lv - 1;