我有发票表。当我更改要支付的总金额时,我想更新表中每条记录的“自定义”金额。我的问题是,我只想更改已选择付款的项目的付款金额(选中一个复选框)
这是我的标记
<table id="invoicetable" class="table">
<tr>
<th> </th>
<th nowrap>Invoice</th>
<th nowrap>Invoice Date</th>
<th nowrap>Due Date</th>
<th nowrap>Amount Owed</th>
<th nowrap>Payment Amount</th>
</tr>
<tr id="invoice-20110106-1006-3">
<td>
<input checked="checked" id="select-invoice-20110106-1006-3" name="select-invoice-20110106-1006-3" title="choose to not pay anything on this invoice by unchecking this box" type="checkbox" value="true" /><input name="select-invoice-20110106-1006-3" type="hidden" value="false" />
<input id="invoice-invoice-date-20110106-1006-3" name="invoice-invoice-date-20110106-1006-3" type="hidden" value="1/6/2011 12:00:00 AM" />
<input id="invoice-date-due-20110106-1006-3" name="invoice-date-due-20110106-1006-3" type="hidden" value="1/5/2011 12:00:00 AM" />
<input id="invoice-open-amount-20110106-1006-3" name="invoice-open-amount-20110106-1006-3" type="hidden" value="281.680000" />
</td>
<td nowrap>
<a id="invoice-detail-link-20110106-1006-3" title="click to view invoice details" reportUrl="/Report.aspx?R=Y7QXaCujl%2fldGD1Dnc%40%2fI1B%2feDe2R5sHaszF3VEPpfd31lbsCoJ%2fh2KBORgR4dDx1N%2frHXpmd8GJljmMluJJB%4028%40tkZ%40zJLKKHflYpaLRs*" printableUrl="/Report.aspx?R=Y7QXaCujl%2fldGD1Dnc%40%2fIyRhg5x0ZGIY2AmKFLQWmSVJd1VYBWOs7HG7S0%2fw3WyUlG6lL6XS5jQZm7q1Y52DJv%2f0My5R%2fZ5Ecfet%2fREtaoc*">20110106-1006-3</a>
</td>
<td nowrap>1/6/2011</td>
<td nowrap>
<span title="this invoice is past due" class="pastdue">1/5/2011</span>
</td>
<td nowrap>$281.68</td>
<td nowrap><a title="click to change payment amount" id="pay-invoice-20110106-1006-3">$281.68</a>
<span id="invoice-payment-20110106-1006-3" style="display:none">
<div style="float:left"><input class="small invoice-payment-amount" id="payment-amount-20110106-1006-3" name="payment-amount-20110106-1006-3" type="text" value="0" /></div>
<div style="float:left"><img height="1" src="/Content/Images/Spacer.png" width="6" /><img border="0" id="cancel-payment-20110106-1006-3" src="/Content/images/cross.png" style="cursor:pointer;" title="cancel changes" /></div>
<input id="full-payment-amount-20110106-1006-3" name="full-payment-amount-20110106-1006-3" type="hidden" value="281.68" />
</span>
</td>
</tr>
</table>
这是我的脚本
var amountTimer;
$('#Amount').keyup(function () {
clearTimeout(amountTimer);
amountTimer = setTimeout(function () {
var amountString = $('#Amount').val();
if (IsNumeric(amountString)) {
var amount = parseFloat(amountString);
$.each("[id^='select-invoice-']:checked", function () {
var invoiceId = $(this).attr('id').substr('select-invoice-'.length);
var openAmountString = $('#invoice-open-amount-' + invoiceId).val();
if (IsNumeric(openAmountString)) {
var openAmount = parseFloat(openAmountString);
if (amount >= openAmount) {
$('#pay-invoice-' + invoiceId).click();
$('#payment-amount-' + invoiceId).val(openAmount.toFixed(2));
amount = amount - openAmount;
} else if (amount < openAmount && amount > 0) {
$('#pay-invoice-' + invoiceId).click();
$('#payment-amount-' + invoiceId).val(amount.toFixed(2));
amount = 0;
} else {
$(this).click();
}
}
});
}
}, 1000);
});
此处的项目附加了其他事件,例如取消选中时淡化整个tr,在文本框更改时重新计算总计,并在其他点击事件中显示/隐藏文本框。 $.each
选择器的工作原理是什么,但$(this).attr('id')
返回undefined。这很奇怪,因为选择器正在基于id。
答案 0 :(得分:3)
您应该使用the other .each()
:
$("[id^='select-invoice-']:checked").each(function() {
var invoiceId = $(this).attr('id').substr('select-invoice-'.length);
/* snip */
});
$.each()
是一个通用的迭代器函数,用于迭代对象,数组和类似数组的对象。
答案 1 :(得分:1)
您传递的是String而不是jQuery对象。
这样:
$.each("[id^='select-invoice-']:checked", function () {
需要:
$.each($("[id^='select-invoice-']:checked"), function () {