关于jquery更改的实时计算

时间:2011-03-28 09:20:28

标签: jquery

我们正在使用以下字段进行一些计算。

$(document).ready(function(){
$('.num').blur(function () {
var amount    = parseInt($('#amount').val()) || 0;
var openbal = parseInt($('#openbal').val());
var disc    = parseInt($('#disc').val());
var netpay  = fees+openbal-disc || 0;
$('#netpay').val(netpay);
});
});

这是html代码

 <select name="product" class="product">
   <option selected>Select product</option>
   <option>Product1</option>
   <option>Product2</option>
 </select>
<input type="text" size="30" name="amount" class="num" id="amount" />
<input type="text" class="num" name="openbal" value="0" id="openbal" />
<input type="text" class="num" name="disc" value="0" id="disc" />
<input type="text" name="netpay" id="netpay" />

所以我们在这里做的是......

  1. 使用ajax从下拉列表中选择产品并获取金额(#amount)。
  2. 我们正在使用.num(class)进行计算,例如给定折扣或任何待定余额。
  3. 我们的代码工作正常,但它只在我们在任何.num字段上模糊时更新netpay(#netpay)并更新计算。但是我们想在金额收到它之后进行计算,如果我们更新任何num(.num)字段,甚至应该更新netpay(#netpay),例如我们给予折扣(#disc)500,所以netpay(#netpay)应该更新。

    感谢您的支持。

3 个答案:

答案 0 :(得分:1)

设置blur的值后,最简单的方法是提升#amount事件

因此,在Ajax调用的success处理程序中,执行以下操作:

$('#amount').val('newValue').blur();

由于blur事件处理程序也绑定到#amount,因此引发事件将执行它(但您可以使用处理程序绑定的任何其他元素)。


不幸的是,使用.val()设置文本输入元素的值会引发change事件。


进一步评论:

如果您使用parseInt,请确保将右基数作为第二个参数传递。所以它应该是parseInt($('#amount').val(), 10)。否则,如果有人输入带前导0的数字,则该值将被解析为八进制值。如果值是没有任何后缀的普通数字,您还可以通过前缀+将字符串解析为数字:

var amount = +$('#amount').val() || 0,
    openbal = +$('#openbal').val() || 0,
    disc  = +$('#disc').val() || 0,
    netpay  = fees + openbal - disc;
$('#netpay').val(netpay);

答案 1 :(得分:0)

你的意思是它在你输入数字输入时不会更新吗?

考虑将计算功能分开并从不同的事件中调用它。

function doCalc() {
    var fees    = 0; // <-- is undefined in your example
    var amount  = parseInt($('#amount').val()) || 0;
    var openbal = parseInt($('#openbal').val());
    var disc    = parseInt($('#disc').val());
    var netpay  = fees + openbal - disc || 0;
    $('#netpay').val(netpay); // <-- the result is not going anywhere
}

$(function(){
    $('.num')
        .blur(doCalc) // keeping your original event
        .keydown(doCalc) // also updating as they type
        .change(doCalc) // also update if value changes
        ;
});

我没有测试过这个。我猜这是不是你想要的。

答案 2 :(得分:0)

尝试使用它:

$('#amount').blur(function ()

而不是:

 $('.num').blur(function ()