Jquery 比较if条件中的输入值

Jquery 比较if条件中的输入值,jquery,html,flask,Jquery,Html,Flask,我试图在jQuery中使用一个简单的if条件启用/禁用一个输入按钮,但不知何故,if起作用,而else if不起作用。我正在尝试在0-40范围内启用输入按钮。当输入大于0的数字时,该按钮启用,但当我大于40时,该按钮不会禁用。我做错了什么 $(文档).ready(函数(){ $('#btn').prop('disabled',true); $('#temp').keyup(函数(){ 如果($('#temp').val()>'40'){ $('#btn').prop('disabled',tr

我试图在jQuery中使用一个简单的
if
条件启用/禁用一个输入按钮,但不知何故,
if
起作用,而
else if
不起作用。我正在尝试在0-40范围内启用输入按钮。当输入大于0的数字时,该按钮启用,但当我大于40时,该按钮不会禁用。我做错了什么

$(文档).ready(函数(){
$('#btn').prop('disabled',true);
$('#temp').keyup(函数(){
如果($('#temp').val()>'40'){
$('#btn').prop('disabled',true);
}else if($('#temp').val()>'0'){
$('#btn').prop('disabled',false);
}
});
});

温度,单位为摄氏度

您正在对数字字符串进行比较,这可能会令人惊讶。例如,
“20”>“5”
为false,因为
“5”
大于
“2”

我想这就是让你措手不及的原因。在进行比较之前,请先转换为数字:

var value = +$("#temp").val();
// −−−−−−−−−^
if (value > 40) {
//          ^−−−−−− no quotes
   $('#btn').prop('disabled', true);
} else if (value > 0) {
// No quotes −−−−−−^
     $('#btn').prop('disabled', false);
}
有很多不同的方法可以将字符串转换为数字。在上面,我使用了一元
+
,但它是一个包含正反两方面的完整列表


我应该注意,当值大于40时禁用输入,但仅当值为1-39时才启用输入,这似乎很奇怪。或许

$("#btn").prop("disabled", +$("#temp").val() > 40);

当值大于40时,该选项将被禁用;当值小于p>时,该选项将被启用。您正在与数字字符串进行比较,这可能会令人惊讶。例如,
“20”>“5”
为false,因为
“5”
大于
“2”

我想这就是让你措手不及的原因。在进行比较之前,请先转换为数字:

var value = +$("#temp").val();
// −−−−−−−−−^
if (value > 40) {
//          ^−−−−−− no quotes
   $('#btn').prop('disabled', true);
} else if (value > 0) {
// No quotes −−−−−−^
     $('#btn').prop('disabled', false);
}
有很多不同的方法可以将字符串转换为数字。在上面,我使用了一元
+
,但它是一个包含正反两方面的完整列表


我应该注意,当值大于40时禁用输入,但仅当值为1-39时才启用输入,这似乎很奇怪。或许

$("#btn").prop("disabled", +$("#temp").val() > 40);

当值大于40时将禁用,当值小于p>时启用。您不应该像这样比较
string
值。比较数字,如下所示

$(文档).ready(函数(){
$('#btn').prop('disabled',true);
$('#temp').keyup(函数(){
var temp=parseInt($('#temp').val();
如果(温度>40){
$('#btn').prop('disabled',true);
}否则,如果(温度>0){
$('#btn').prop('disabled',false);
}
});
});

温度,单位为摄氏度

您不应该像那样比较
字符串
值。比较数字,如下所示

$(文档).ready(函数(){
$('#btn').prop('disabled',true);
$('#temp').keyup(函数(){
var temp=parseInt($('#temp').val();
如果(温度>40){
$('#btn').prop('disabled',true);
}否则,如果(温度>0){
$('#btn').prop('disabled',false);
}
});
});

温度,单位为摄氏度

问题是因为
val()
返回一个字符串,所以比较的是字符串值,而不是整数值。所以,正如您所发现的,您依赖于类型的隐式强制,这可能导致奇怪的行为

要解决此问题,请为条件使用数值,这可以通过使用整型文字和
parseFloat()
来实现。试试这个:

jQuery(函数($){
设$btn=$('#btn').prop('disabled',true);
$('#temp').keyup(函数(){
var value=parseFloat($(this).val())| | 0;
$btn.道具(禁用),价值40);
});
});

温度,单位为摄氏度

问题是因为
val()
返回一个字符串,所以比较的是字符串值,而不是整数值。所以,正如您所发现的,您依赖于类型的隐式强制,这可能导致奇怪的行为

要解决此问题,请为条件使用数值,这可以通过使用整型文字和
parseFloat()
来实现。试试这个:

jQuery(函数($){
设$btn=$('#btn').prop('disabled',true);
$('#temp').keyup(函数(){
var value=parseFloat($(this).val())| | 0;
$btn.道具(禁用),价值40);
});
});

温度,单位为摄氏度

当它不工作时,
$(“#temp”).val()的值是多少?当它不工作时,
$(“#temp”).val()的值是多少?我到处都能见到你,伟大的工程师!谢谢你的回答!:)我到处都能见到你,伟大的工程师!谢谢你的回答!:)PS,我会在
输入上使用
“input”
事件(允许粘贴等),也
这个.value
看起来比
$(this.val()
)干净。PS,我会在
输入上使用
“input”
事件(允许粘贴等),同样
这个.value
看起来比
$(this.val()
)干净。