美好的一天,
我遇到了一个非常令人沮丧的错误。
function handle_max_amount() {
var money = $('#AmountField').val();
var open_amount = $('#total_open_amount').val();
if (money < 0){
$('#AmountField').val(0);
}
else if (open_amount < money) {
$('#AmountField').val(open_amount);
}
}
以下代码是由非常简单的代码执行的
<input id="total_open_amount" type="hidden" value="137">
<input type="text" id="AmountField" onchange="handle_max_amount();" />
这是绝对基础。我知道,但是即使例如输入50,他也会将其重置为137。因为Javascript声称50大于137。
我检查了是否未对ID字段进行双重定义。
但 total_open_amount 和 AmountField 也已定义一次。
因为这太可怕了,所以我在这里问这个。
答案 0 :(得分:0)
您需要将值解析为int类型以进行比较,如下所示
function handle_max_amount() {
var money = parseInt($('#AmountField').val() || "0");
var open_amount = parseInt($('#total_open_amount').val() || "0");
if (money < 0){
$('#AmountField').val(0);
}
else if (open_amount < money) {
$('#AmountField').val(open_amount);
}
}
答案 1 :(得分:0)
.val()
返回字符串,因此不能使用字符串值进行比较,尤其是在执行任何数学运算时。
改为使用parseInt()
。
function handle_max_amount() {
var money = parseInt($('#AmountField').val());
var open_amount = parseInt($('#total_open_amount').val());
if (money < 0){
$('#AmountField').val(0);
}
else if (open_amount < money) {
$('#AmountField').val(open_amount);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<input id="total_open_amount" type="hidden" value="137">
<input type="text" id="AmountField" onchange="handle_max_amount();" />
希望这会有所帮助!
答案 2 :(得分:0)
在处理存储货币的变量时,需要使用
parseFloat()
而不是parseInt()