使用jQuery重复控制

时间:2015-03-02 18:53:54

标签: javascript jquery asp.net

我可能因为这个问题而失去声誉;但我一直在尝试无限的代码变化,每次都失败了。所以我要伸出手。

我正在研究aspx。这些都是构建的,他们只是想要一些额外的功能。

我们正在使用ScriptSharp进行转码编译为JavaScript。

基本上,我们有一个HTML表格。表中的每一行代表一张发票。表格中的一列表示发票上的到期金额(称为amountDue)。表格中的另一列包含一个文本框,用户可以在其中输入要应用于发票的金额(称之为amountToPay)。如果金额不同,则另一列填充文本框,预先填充应付金额与输入金额之间的差额(称之为difference)。在此列之后是另一列,其中列出了解释差异的原因的下拉列表(称之为reason)。用户可以更改difference文本框中的差异。如果发生这种情况,则需要在表格的同一行显示新的其他difference文本框和新的其他reason下拉列表,每个列都在相应的列下。

我的第一次尝试以几何方式复制控件,例如,从两个difference文本框转到八个。我想出来了。

现在,我尝试的每个jQuery函数组合都会复制所有控件,或者没有任何控件。因此,在difference更改时,不会添加新的difference文本框,也不会添加存在的difference文本框的数量。所以如果两个存在,那么四个结果。如果存在四个,则结果为八个。

好的,这是一些代码。

以下是differencereason的两列。

<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;
}

我的尝试包括调用afterinsertAfterhtmlclonecloneNodeappendChild以及on,on,on不同的对象,包括divsdivo

我的部分问题是我没有使用过jQuery。我知道这很危险。但肯定这是可能的。给定td,找到以下td。其中td将是一个或多个div的列表。获取最后一个div,复制它,并将该副本附加到div列表中。完成。

什么,哦,我错过了什么?火焰开启。

1 个答案:

答案 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;
}