【发布时间】:2015-06-01 02:29:38
【问题描述】:
我正在实现一个计时器,并试图找出为什么在输入“秒”框中输入大于 60 的数字时无法更改“分钟”输入框的内容。当我打印“mins”的值时,我得到 NaN,但是当我打印它的类型时,我得到它的一个数字。我刚刚开始使用 JavaScript,所以任何帮助将不胜感激。谢谢:)
jQuery:
$(function(){
$("#sec").change(function(){
if($("#sec").val() >= 60){
secs = parseInt( $("#sec").val() );
console.log("secs is " + secs );
if(secs < 0){
alert("Please enter a valid time interval");
$("#sec").val("");
return;
}
mins = parseInt( $("#min").val() );
console.log("mins is " + mins );
console.log(typeof mins);
hours = parseInt( $("#hour").val() );
days = parseInt( $("#day").val() );
secs = secs % 60;
mins = mins + Math.floor(secs/60);//can be > 60
console.log("mins is " + mins );
console.log(typeof mins);
hours += mins/60;
days += hours/24;
$("#min").val(mins);
$("#hour").val(hours + mins/60);
$("#day").val(days + hours/24);
}
});
});
html:
div class="left"></div>
<div class="center">
<h3> Please enter a time: </h3>
<form class="form-inline">
<div class="form-group col-xs-2">
<input id="day" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Days">
</div>
<div class="form-group col-xs-2">
<input id="hour" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Hours">
</div>
<div class="form-group col-xs-2">
<input id="min" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Minutes">
</div>
<div class="form-group col-xs-2">
<input id="sec" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Seconds">
</div>
【问题讨论】:
-
常量
NaN的类型是“数字”。 -
为什么大家都一直使用parsetInt?数字有什么问题?
-
@dandavis:确实,或者
+。很长一段时间以来,当引擎扩展 JS 以支持八进制时,使用带基数的parseInt很重要,因为八进制前缀是0并且用户一直在开头输入带有0的数字,而不希望它们是八进制。如果用户输入012,他们的意思可能是十进制的 12,而不是十进制的 10。所以使用parseInt(str, 10)变成了de rigur。 ES5 明确表示引擎真的不应该这样做,甚至在严格模式下禁止它,这让生活更轻松(十六进制前缀问题不大;用户不太可能输入0x12并表示 12 位十进制...... ) -
从技术上讲,您应该在 BEFORE 执行
if()测试之前对 secs 值执行 parseInt。基本上你有If (somestring > 60) { convert string to int }。 -
@MarcB:没关系,因为 ">" 运算符会将字符串转换为数字以匹配 60...
标签: javascript jquery nan typeof