JS脚本返回NaN
JS Script Returns NaN
我在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()
,但无论我把它放在哪里,都无济于事。
您有一个范围问题,这就是发生的情况:
- 您将
cur_lv
声明为1
[第2行](因为它不在函数内部,所以cur_lv
将是一个全局变量) - 在
#btn_up
和#btn_down
的click
函数中,您正在声明一个具有局部作用域的新变量(var
语句表示您正在声明局部变量) - 单击
#btn_up
或#btn_down
时,将在本地范围内创建一个新变量(cur_lv
),其值为undefined
。接下来,您将cur_lv - 1
归因于cur_lv
,JavaScript将在算术运算中将undefined
转换为NaN
,因此NaN - 1
也是NaN
,这就是它返回Nan
的原因
解决方案是在#btn_up
和#btn_down
的click
函数中删除语句var
,这样就可以引用全局cur_lv
(在第2行声明)。
[更新]
你的代码也有一些其他问题:
- 正如@Pevara所说,你的第一个else-if(JS Script返回NaN)中有一个拼写错误
- 在另一个例子中,如果你将
newscount
归因于cur_lv
,而不是比较它们(使用==
或===
) - 根据您放置
<script>
标记的位置,您的代码将找不到某些元素:例如:`var bt=document.getElementById('button');我的真棒按钮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 - 1
。undefined
将被转换为可以在减法中使用的数值,该数值为NaN
。CCD_ 38的结果是CCD_。
代码应该是:
cur_lv = cur_lv - 1;
相关文章:
- 如何防止Math.max()返回NaN
- 尝试求和时,在我的表的页脚中返回$NaN
- 为什么Math.pow(1,无穷大)返回NaN
- JavaScript:返回NaN(第2部分)
- 为什么这个代码返回NaN
- Protractor-分配给element.all.locator.count的变量返回NaN why
- javascript 在求和时返回 NaN
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 返回“[对象对象] NaN” - Javascript
- 返回为 NaN 的值
- 计算地理位置距离返回 NaN
- Javascript函数返回'NaN'或者'未定义'
- nan在C++中是什么意思?为什么pow(-4,-2.1)返回-nan
- 货币字段上的 parseInt 返回 NaN
- Javascript:解析csv中的字符串返回NaN(不是数字)
- JS脚本返回NaN
- 我如何才能得到返回'0'而不是NaN
- 解析html td返回NaN
- Javascript函数返回NaN
- 为什么angular.isNumber(NaN)返回true ?