我遇到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()
但是没有任何帮助 - 无论我把它放在哪里。
答案 0 :(得分:1)
你有一个范围问题,这是正在发生的事情:
cur_lv
声明为1
[第2行](因为它不在函数内,cur_lv
将是一个全局变量。)click
和#btn_up
的{{1}}函数中,您声明了一个具有局部范围的新变量(#btn_down
语句表示您声明了一个局部变量) var
或#btn_up
后,将在本地范围内创建一个新变量(#btn_down
),其值为cur_lv
。接下来,您将undefined
归因于cur_lv - 1
,JavaScript会在算术运算中将cur_lv
转换为undefined
,因此NaN
也是NaN - 1
,这就是它返回NaN
。解决方案是删除Nan
和var
的{{1}}函数中的语句click
,这样就引用了全局#btn_up
(声明了在第2行。)
[更新]
您的代码还有其他一些问题:
#btn_down
归因于cur_lv
,而不是比较它们(使用newscount
或cur_lv
),则在您的第二个其他地方。==
标记的位置,您的代码将找不到一些元素:
例如:
`
var bt = document.getElementById('button');
我真棒按钮
===
bt <script>
$(document).ready(function(){`,此函数中的代码只会在文档准备好后运行(它包含这个小按钮)。尝试修复列出的问题并在
内移动代码(从will be undefined, because the script will run before the button exists in page. To resolve this issue, you can add code inside
到var cur_lv = 1;
)。此外,您可以使用浏览器中的开发人员工具来帮助您发现错误。
希望它有所帮助!
答案 1 :(得分:0)
问题是这段代码:
var cur_lv = cur_lv - 1;
它创建一个隐藏全局变量的局部变量。赋值的右侧也使用局部变量,因此表达式的值为undefined - 1
。 undefined
将转换为可在减法中使用的数值,该数值为NaN
。 NaN - 1
的结果是NaN
。
代码应为:
cur_lv = cur_lv - 1;