2016-11-09 40 views
0

我正在尝试使用数组做一个简单的计算onblur,但它不会触发。如果我将其更改为跨度或div,则可以正常工作。为什么它不与输入字段一起工作?使用输入字段而不是跨度或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); 
    }); 
} 
+0

'$( 'TR')each' - 你没有任何' '您的代码示例中的元素。这应该指向文本框?或者你错过了它。请提供一个最小,可验证,完整的例子:-) – ADyson

回答

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>

+0

我为输入字段添加了更多按钮,名称变成了name =“partprice [2] name =”partprice [3] etc等 – JCD

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