带有IF语句的实时计算JQuery


只怕再见是故人
2025-02-02 10:08:56 (1月前)

我正在尝试执行实时计算,但对我而言不起作用。我避免使用id选择器在多个表单上应用相同的代码。如果if语句的代码仅对某些数字有效,则在下面。

$(function() {
$(‘.amount’).on(‘input’, function() {
var $amount = $(this);
var $form = $amount.closest(‘form’);
var $tax = $form.find(“.tax”);
var $sum = $form.find(“.sum”);
var s = $amount.val();
if ( s < 100 ) {
var tax = parseFloat((1 / 10).toFixed(1));
} else if ( s >= 100 && s <= 1000) {
var tax = Number(s) * (0.5/100);
var tax = tax.toFixed(1);
} else {
var tax = tax.value = (10);
}
$tax.val(tax);
$sum.val(parseFloat(Number(s)) + Number(tax));
});
});




tax






total





2 条回复
  1. 1# 春风助手 | 2020-08-11 18-21

    您的问题在于else条件,金额为> 1000。tax在未定义值的情况下,您正在使用该值,因此在此行上会出现错误:

    1. var tax = tax.value = (10);

    tax也是一个整数(或您调用的字符串toFixed()),永远不会有value属性。

    要解决此问题,tax请先定义变量,然后在所有if情况下进行修改:

    1. $(function() {
    2. $('.amount').on('input', function() {
    3. var $amount = $(this);
    4. var amount = $amount.val()
    5. var $form = $amount.closest('form');
    6. var $tax = $form.find(".tax");
    7. var tax = 0;
    8. var $sum = $form.find(".sum");
    9. if (amount < 100) {
    10. tax = (1 / 10).toFixed(1);
    11. } else if (amount <= 1000) {
    12. tax = (Number(amount) * (0.5 / 100)).toFixed(1);
    13. } else {
    14. tax = 10;
    15. }
    16. $tax.val(tax);
    17. $sum.val(parseFloat(amount) + parseFloat(tax));
    18. });
    19. });
    20. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    21. <form>
    22. <input type="text" name="amount" class="amount">
    23. <div>
    24. <b>tax</b>
    25. <p>
    26. <input name="tax" type="text" class="tax" readonly="readonly">
    27. </p>
    28. </div>
    29. <div>
    30. <b>total</b>
    31. <p>
    32. <input name="sum" type="text" class="sum" readonly="readonly">
    33. </p>
    34. </form>

    另请注意,if中>= 100不需要检查else,我将其更改s为amount。始终使用有意义的变量名。

登录 后才能参与评论