我有一个文本框:
<input type="number" min="0" max="100" value="1" class="form-control" data-bind="value: number, valueupdate:'afterkeydown'" required="">
它绑定到viewModel
:
var ViewModel = function () {
var self = this;
self.number = ko.observable(1);
}
稍后在viewModel
我有函数,我检查值Number
是否真的是一个数字而不是一个:
if (self.number() < 1 || isNaN(self.number()) {
console.log(isNaN(self.number());
alert("Error");
return true;
}
我检查了输入:
所有人isNaN(self.number()) returns false
有什么可以解决这个错误?
@Update:
我查看了console.log(self.number())
对于字母输入,它返回空字符串。那么为什么NaNN返回false而不是true?
答案 0 :(得分:4)
由于您的input
类型为number
,因此任何非数字值都将被解释为空字符串。
所以你最终得到一个空字符串,然后将其传递给isNaN
。那么会发生什么?请参阅规范中的isNaN
:
- 如果ToNumber( number )为NaN,则返回true。
- 否则,返回false。
醇>
因此使用空字符串调用“ToNumber”。当应用“ToNumber”操作时,空字符串强制转换为0
,而0
不是NaN
。请参阅规范中的ToNumber Applied to the String Type:
StringNumericLiteral ::: [empty]的MV为0.