我正在实施一个计时器,并试图找出为什么我无法改变我的" min"输入框中输入大于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>
答案 0 :(得分:9)
尽管名称“不是数字”,但typeof NaN
为"number"
。对真的。 :-) NaN
,与Infinity
一样,是数字类型。它是为IEEE-754中的数字定义的(浮点数格式JavaScript和许多其他编程语言使用;具体来说,JavaScript使用现在称为“binary64子格式”,又称“双精度”)。
如果您对无法解析的内容发送parseInt
,则会返回NaN
。例如:
var n = parseInt("");
console.log(typeof n); // "number"
console.log(n); // "NaN"
如果您想0
mins
使用mins = parseInt( $("#min").val() ) || 0;
(空白时),可以使用JavaScript's curiously-powerful ||
operator执行此操作:
parseInt
这会返回0
返回的号码,如果parseInt
返回0
或NaN
,则会parseInt
。
附注:
如果你要使用n = parseInt(str, 10)
进行用户生成的输入解析,你可能想要使用它的第二个参数,它告诉它使用什么数字基数(10,十进制)。例如,0x
。否则,它会尝试从输入中猜测(主要是,它将以parseInt
开头的字符串视为十六进制)。
str = "4 apples"; n = parseInt(str)
会很乐意忽略数字后面的额外字符。例如,n = 4
为我们提供+
。如果您不想要这种行为,可以使用n = +str;
(Number
)或n = Number(str)
(0x
),两者都考虑整个字符串。但是他们在开头都接受{{1}}表示十六进制,并且不支持使用基数(数字基数)。