添加唯一ID以形成总计输入

时间:2009-11-12 09:45:25

标签: forms jquery jquery-selectors

我遇到的问题是我正在开发票系统。哪个使用了这个,

$(document).ready(function() {
    $('#add').click(function() {
       JQuery('#lineItems').append('<input type="text" name="description[]"
           class="ui-corner-all text invDesc" /> 
           <input type="text" name="qty[]" class="ui-corner-all text invQty" /> 
           <input type="text" name="amount[]" class="ui-corner-all text invAmount"
           title="Amount" /> 
           <input type="hidden" name="rowTotal[]" class="row-total-input" />');
    });
   });

创建新订单项。名为rowTotal []的隐藏输入用于保存每行的总数,以便可以将它们相加。我用来获取qty *金额的行总数的代码是,

$(function(){
    $('.row-total-input').each(
        function( intIndex ){
            $('.invAmount').livequery('blur', function() {
                    var $this = $(this);
                    var amount = $this.val();

                    var qty = $this.parent().find('.invQty').val(); 

                    if ( (IsNumeric(amount)) && (amount != '') ) {           
                        var rowTotal = qty * amount;   
                        $this.css("background-color", "white").parent().find(".row-total-input").val(rowTotal); 
                    } else {        
                        $this.css("background-color", "#ffdcdc");                     
                    };          

                    calcProdSubTotal();      
                    calcOrderTotal();
            });
        }
    );
});

但是它会将所有rowTotal []输入字段更新为最后一行总数,因此最终总和不正确。

我假设我需要为每个rowTotal []创建某种唯一ID,因此只更新正确的ID。我只是不知道该怎么做。

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题出在这里啊:

var qty = $this.parent().find('.invQty').val();

如果每一行都有一个不同的父级,那就没问题,但是所有的“行”都包含在同一个父级中 - #lineItems。应该有什么帮助才能将当前行创建代码更改为:

$(document).ready(function() {
    $('#add').click(function() {
       JQuery('#lineItems').append('<div><input type="text" name="description[]"
           class="ui-corner-all text invDesc" /> 
           <input type="text" name="qty[]" class="ui-corner-all text invQty" /> 
           <input type="text" name="amount[]" class="ui-corner-all text invAmount"
           title="Amount" /> 
           <input type="hidden" name="rowTotal[]" class="row-total-input" /></div>');
         //notice the extra div tag that wrapps around all the input fields
    });
});