使用输入字段而不是span或div

时间:2016-11-09 16:10:49

标签: javascript jquery

我正在尝试使用数组进行简单的计算,但它没有触发。如果我将其更改为span或div,它可以正常工作。为什么不使用输入字段?

我需要它作为输入字段,因为它更容易将值存储在数据库中。

    <input type="text" class="input-small" name="partnumber[]">
    <input type="text" class="input-small" name="partdescription[]" >
    <input type="text" class="input-small" name="partprice[]" onblur="doCalc(); calculate(); ">
    <input type="text" class="input-small" name="partquantity[]" onblur="doCalc(); calculate(); ">
    <input type="text" readonly class="input-small parttotal" name="parttotal[]" >

计算

function doCalc() {
    var total = 0;

    $('tr').each(function() {
        $(this).find('.parttotal').html($('input:eq(2)', this).val() * $('input:eq(3)', this).val());
    });
    $('.parttotal').each(function() {
        total += parseInt($(this).text(),10);
    });
}

2 个答案:

答案 0 :(得分:0)

首先,我不会使用内联事件..这里我使用了委托事件,如果你动态添加更多行,这里有一个优势,它仍然可以工作..

接下来确保每一行都有每行的包装,这里我使用了一个简单的DIV。 Yousr可能是你的TR ..

其余部分变得简单,这里可以看到,这个例子我只是包括了价格,数量和数量。总计,完成2行测试..

function calc() {
  var h = $(this).closest('div');
  var qty = h.find('[name="partquantity[]"]');
  var price = h.find('[name="partprice[]"]');
  var total = h.find('[name="parttotal[]"]');
  total.val(qty.val() * price.val());
}

$('body').on('blur', '[name="partprice[]"],[name="partquantity[]"]', calc);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div>
  <input type="text" class="input-small" name="partprice[]">
  <input type="text" class="input-small" name="partquantity[]">
  <input type="text" readonly class="input-small parttotal" name="parttotal[]" >
</div>

<div>
  <input type="text" class="input-small" name="partprice[]">
  <input type="text" class="input-small" name="partquantity[]">
  <input type="text" readonly class="input-small parttotal" name="parttotal[]" >
</div>

答案 1 :(得分:0)

您无法使用.html()设置文本框的

更改此行:

$(this).find('.parttotal').html($('input:eq(2)', this).val() * $('input:eq(3)', this).val());

$(this).find('.parttotal').val($('input:eq(2)', this).val() * $('input:eq(3)', this).val());

请注意,更改('.parttotal').html变为('.parttotal').val