我在比较两个integer
值时遇到了一个奇怪的情况。从Database
读取一个值,其类型为int
,因此这是int
值。第二个值来自textbox
,其类型为number
。
如果textbox
值小于100,那么如果比较大于100则比较显示奇怪的结果。
如果我使用parseInt
,那么一切都很好。我只是想知道为什么会这样?
var CADMeterReading = 10;
<input type="number" name="MeterReading" placeholder="0000" value="20" id="MeterReading" />
if($("#MeterReading").val()) <= CADMeterReading) //returns false as excepted
如果文本框的值大于100而不是按预期进行比较
var CADMeterReading = 80;
<input type="number" name="MeterReading" placeholder="0000" value="100" id="MeterReading" />
if($("#MeterReading").val()) <= CADMeterReading) //returns true
答案 0 :(得分:4)
将input
的类型定义为number
只会阻止用户输入除数字以外的任何内容:
<input type="number" name="MeterReading" placeholder="0000" value="20" id="MeterReading"/>
但不表示javascript会将其作为号读取。
$("#MeterReading").val()
会将数据作为String
类型返回,因此您将比较字符串和整数,从而导致奇怪的比较。
这也是为什么当您使用parseInt
时,数字会被正确比较,因为您现在已经要求javascript在比较之前将string
转换为integer
。
答案 1 :(得分:1)
输入元素将始终返回一个字符串,这就是jQuery.val()
的工作原理,我认为在很大程度上它取决于HTML规范(它将inputElement.value
的返回值定义为输入DOMString
)。
在此处查看有关此问题的更多讨论:How can val() return Number?,但基本上您似乎已经在功能方面找到了答案 - 使用parseInt($("#MeterReading").val(),10)
答案 2 :(得分:0)
定义数字,并不意味着它以整数形式提供值,它总是以字符串形式提供 因此,您需要使用parseInt()将其转换为整数以进行比较数
它的字符串比较,试试&#34; 100&#34; &LT; 101,这给你真实所以不要 认为它不适用于100以上