Javascript 简单代码中奇怪的jquery错误

Javascript 简单代码中奇怪的jquery错误,javascript,jquery,Javascript,Jquery,我有一个简单的html代码和表单: <span class="price"></span> Enter amount: <input type="text" class="form-control amount" name="amount" value="500"> <!--Next input fields are hidden by Bootstrap class "hide"--> <input type="text" name="

我有一个简单的html代码和表单:

<span class="price"></span>
Enter amount: 
<input type="text" class="form-control amount" name="amount" value="500">

<!--Next input fields are hidden by Bootstrap class "hide"-->
<input type="text" name="minimal-amount" class="hide minimal-amount" value="500">
<input type="text" name="oneprice" class="hide oneprice" value="0.20">

<script>
$(".amount").on("change", function(){
        var am = $(".amount").val();
        var min = $(".minimal-amount").val()
        if(am<min){
            $(".amount").val($(".minimal-amount").val());
        }else{
            var am = $(".amount").val();
            var oneP = $(".oneprice").val();
            var finalPrice = am*oneP;
            $(".price").html(finalPrice);       
        }
});
</script>

输入金额:
美元(“.amount”)。关于(“更改”,函数(){
var am=$(“.amount”).val();
var min=$(“.minimal amount”).val()

if(am您应该在使用前解析该值。因为
.val()
将只返回字符串类型

$(".amount").on("change", function(){
        var am = parseFloat($(".amount").val());
        var min = parseFloat($(".minimal-amount").val());
        if(am<min){
            $(".amount").val($(".minimal-amount").val());
        }else{
            var am = $(".amount").val();
            var oneP = $(".oneprice").val();
            var finalPrice = am*oneP;
            $(".price").html(finalPrice);       
        }
});
$(“.amount”)。关于(“更改”,函数(){
var am=parseFloat($(“.amount”).val());
var min=parseFloat($(“.minimal amount”).val();

如果(am该代码中有很多陷阱。下面是一个正在工作的JSBin:

集锦 您需要先初始化DOM,然后才能使用它。 将其包装在传递给jQuery的函数中会使其等待 页面在操作之前完成加载

$(function() { ... });
使用缓存的值,因为元素不会有太大变化。 这就省去了多次解析选择器的需要 关于打字和可读性

var $amount         = $("#amount");
var $minimalAmount  = $("#minimal-amount");
var $onePrice       = $("#oneprice");
var $finalPrice     = $("#price");
将字符串解析为Int时,需要使用
parseInt

var amount = parseInt($amount.val(), 10);
相反,将字符串解析为浮点时,需要使用
parseFloat

var price = parseFloat($onePrice.val());
JavaScript不能很好地处理基于浮点的算法。 舍入误差很糟糕,尤其是在处理我们需要的钱时 移动小数位以防止在更重要的位置出现舍入错误 部分价格价值

var total = (amount * (price * 100)) / 100;

查看中的操作。

@Satpal抱歉,我没有理解你。你能解释一下吗?同时调用
$(“.minimal amount”).val()
两次似乎很愚蠢,因为你已经在
min
中有了值。parseInt应该取一个基数值:
parseInt(“1234”,10)
@Satpal no.没有比parseDouble更好的了。我编辑了answer@Ingmars是的,基数是可选参数。
但很重要。请阅读