我可能因为这个问题而失去声誉;但我一直在尝试无限的代码变化,每次都失败了。所以我要伸出手。
我正在研究aspx。这些都是构建的,他们只是想要一些额外的功能。
我们正在使用ScriptSharp进行转码编译为JavaScript。
基本上,我们有一个HTML表格。表中的每一行代表一张发票。表格中的一列表示发票上的到期金额(称为amountDue
)。表格中的另一列包含一个文本框,用户可以在其中输入要应用于发票的金额(称之为amountToPay
)。如果金额不同,则另一列填充文本框,预先填充应付金额与输入金额之间的差额(称之为difference
)。在此列之后是另一列,其中列出了解释差异的原因的下拉列表(称之为reason
)。用户可以更改difference
文本框中的差异。如果发生这种情况,则需要在表格的同一行显示新的其他difference
文本框和新的其他reason
下拉列表,每个列都在相应的列下。
我的第一次尝试以几何方式复制控件,例如,从两个difference
文本框转到八个。我想出来了。
现在,我尝试的每个jQuery函数组合都会复制所有控件,或者没有任何控件。因此,在difference
更改时,不会添加新的difference
文本框,也不会添加存在的difference
文本框的数量。所以如果两个存在,那么四个结果。如果存在四个,则结果为八个。
好的,这是一些代码。
以下是difference
和reason
的两列。
<td class="currency">
<div>
<input class="difference_textbox" type="text" value="0.00" style="display: none;" />
</div>
</td>
<td>
<div>
<select style="display: none;" class="adj_reason_select">
<option></option>
</select>
</div>
</td>
我将跳过ScriptSharp并列出反编译的JavaScript(调试版本):
// Let this function represent the function called on `difference` change.
ReceivePayment._addAdjustment = function ReceivePayment$_addAdjustment(e) {
var self = $(e.target);
var customerInvoice = self.parents('.customer_invoice');
var amountPaidBox = customerInvoice.find('.amount_to_pay_input');
// ...
var amountPaidTD = amountPaidBox.closest('td');
var diffTextBoxTD = ReceivePayment._duplicateInputControl(amountPaidTD);
var adjReasonSelectTD = ReceivePayment._duplicateInputControl(diffTextBoxTD);
// ...
}
ReceivePayment._duplicateInputControl = function ReceivePayment$_duplicateInputControl(td) {
// This is very verbose so that I can stop at any point and
// examine what I've got.
var o = td.next(); // Grab the next td.
var divs = o.children(); // Grab the div(s) contained within the td.
var div = divs.last(); // Grab the last div within the td.
// And here's where all my gyrations occur, infinite permutations
// of jQuery calls, not one permutation of which has succeeded in
// adding the contents of the final div to the list of divs.
var d = div[0];
var html = d.outerHTML;
var s = html.toString();
div.add(s);
return o;
}
我的尝试包括调用after
,insertAfter
,html
,clone
,cloneNode
,appendChild
以及on,on,on不同的对象,包括divs
,div
,o
等
我的部分问题是我没有使用过jQuery。我知道这很危险。但肯定这是可能的。给定td
,找到以下td
。其中td
将是一个或多个div
的列表。获取最后一个div
,复制它,并将该副本附加到div
列表中。完成。
什么,哦,我错过了什么?火焰开启。
答案 0 :(得分:0)
在花了很多时间旋转车轮之后,我似乎偶然发现了解决方案。我放弃。然后,当然,它打击了我:
ReceivePayment._duplicateInputControl = function ReceivePayment$_duplicateInputControl(td) {
// This is very verbose so that I can stop at any point and
// examine what I've got.
var o = td.next(); // Grab the next td.
var divs = o.children(); // Grab the div(s) contained within the td.
var div = divs.last(); // Grab the last div within the td.
o.append(div.clone());
return o;
}