我有一張發票形式來生成PDF。我想在用戶填寫表單的值更改後計算輸入。我可以計算第一行,但是我想(1)計算每一行,並在最後(2)正確計算所有列。對於(1)的第一步,我將進行總計算。根據每行的變化計算
問題是,我使用動態名稱和ID生成行,因爲我將它們發佈到數據庫中。對於這個例子,id對於每一行輸入都是一樣的。
PS:我不能使.change
工作和我使用$(document).on('change', '#qty', function (e) { calculateLine(); });
來觸發針對每個輸入計算功能。我不知道爲什麼.change
不支持,因爲它支持最新的jQuery。
[invoice.php]
<script>
$(document).ready(function() {
$(document).on('change', '#qty', function (e) { calculateLine(); });
$(document).on('change', '#price', function (e) { calculateLine(); });
$(document).on('change', '#discount', function (e) { calculateLine(); });
$(document).on('change', '#discountPrice', function (e) { calculateLine(); });
});
</script>
[invoice.js]
function calculateLine() {
var qty = parseFloat($('#qty').val());
var price = parseFloat($('#price').val());
var discount = parseFloat($('#discount').val());
var discountPrice = parseFloat($('#discountPrice').val());
var vat = parseFloat($('#vat').val());
var netTotal = 0;
var total = 0;
var vatAmount = 0;
if (!qty && qty == 0) {
return;
}
if (!price && price == 0) {
return;
}
netTotal = qty * price;
if ((!discount || discount == 0) && discountPrice != 0) {
discount = (discountPrice/netTotal) * 100;
}
if ((!discountPrice || discountPrice == 0) && discount != 0) {
discountPrice = (netTotal/100) * discount;
}
if (discountPrice != 0 && discount != 0) {
discountPrice = (netTotal/100) * discount;
}
if ((!discount || discount == 0) && (!discountPrice || discountPrice == 0)) {
discountPrice = 0;
discount = 0;
}
total = netTotal - discountPrice;
if (!total || total == 0) {
total = 0;
}
vatAmount = (total/100) * vat;
$('#total').val(total);
$('#discount').val(discount);
$('#discountPrice').val(discountPrice);
$('#vatAmount').val(vatAmount);
//calculateTotal();
}
[HTML]
<tr>
<td class="col-xs-0">
<input type="checkbox" name="selected[]" class="checkall">
</td>
<td class="col-xs-5">
<textarea type="text" name="invoice[item][{{j}}][description]" class="form-control description" rows="1" ></textarea>
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][unit]" class="form-control unit" value="" />
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][qty]" class="form-control qty" value="" />
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][price]" class="form-control price" value="" />
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][discount]" class="form-control discount" value="" >
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][discountPrice]" class="form-control discountPrice" />
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][total]" class="form-control total" value="" />
</td>
<td class="col-xs-1">
<input type="text" name="invoice[item][{{j}}][vat]" class="form-control vat" value="{{invcl_vat}}" readonly />
<input type="hidden" name="invoice[item][{{j}}][vatAmount]" class="form-control vatAmount" value="" readonly />
</td>
</tr>
謝謝你的回答。問題是我有動態名稱(或ids),我無法將它們傳遞給腳本來處理它們。我可以使用靜態ID或所有輸入。讓我嘗試一下你的建議並回復 –
@JohnPriestakos:(「Revert」不是你想要的那個詞。)那麼,你的問題中有什麼'#qty'等等呢?你不能使用這些,他們是'身份證',但你需要有一些工作。最糟糕的情況是,你可以用位置的東西(在該行的第一個輸入爲'input:eq(0)',輸入:eq(1)'爲第二個輸入)等等。 –
你的例子非常有幫助。現在我必須糾正'input:eq()'並使其工作。 (我用每行的html代碼更新了我的問題 - 我刪除了id並將它們作爲類) –