0

データベースを呼び出してオートコンプリート データを取得するスクリプトがあります。

特定のオートコンプリート データ (商品名) が選択されると、その他のいくつかのフィールド (商品コード、価格、数量) が入力されます。

数量が変更されると、明細合計フィールドは「数量 * 価格」合計に変わります。

行を動的に追加し、それぞれを同じ方法でオートコンプリートするオプションがあります...各行の合計を合計する総計があります。

私の問題は、数量が変更されたときにのみ総計が変更されることです。各行の価格の焦点にロードする必要があります。また、行を削除しても、その特定の行合計の金額が総計から削除されません。最初の行の数量(最初の行のみが影響を受けます)それは総計をその行が現在追加されているものにリセットします...誰かが私のコードを見てください。

ライブ バージョンは http://cardoso.co.za/form/にあります。

http://cardoso.co.za/form/form.zipを参照すると、そこからファイルを入手することもできます。

どんな助けでも大歓迎です!!!

スクリプト全体の一部のコードを編集します。

    var $itemsTable = $('#itemsTable');
var rowTemp = [
'<tr class="item-row">',
'<td><a id="deleteRow"><img src="images/icon-minus.png" alt="Remove Item" title="Remove Item"></a></td>',
'<td><input name="itemType" class="itemType" id="itemType" tabindex="1" style="width:350px;"/></td>',
'<td align="center"><input name="itemCode" class="itemCode" id="itemCode" readonly="readonly" style="width:60px;" tabindex="-1"/></td>',
'<td align="center"><input name="itemQty" class="itemQty" id="itemQty" tabindex="2" style="width:40px;" maxlength="4" value=""/></td>',
'<td width="14%" align="center"><input name="itemPrice" class="itemPrice" id="itemPrice" readonly tabindex="-1"/></td>',
'<td width="17%" align="right"><input name="itemTotal" class="itemTotal" id="itemTotal" readonly tabindex="-1"/></td>',
'</tr>'
].join('');
$('#addRow').bind('click',function(){
var $row = $(rowTemp);
var $itemType = $row.find('#itemType');
var $itemCode = $row.find('.itemCode');
var $itemPrice = $row.find('.itemPrice');
var $itemQty = $row.find('.itemQty');
var $itemTotal = $row.find('.itemTotal');
if ( $('#itemType:last').val() !== '' ) {
$row.find('#itemType').autocomplete({
source: 'item-data.php',
minLength: 1,
select: function(event, ui) {
$itemType.val(ui.item.itemType);
$itemCode.val(ui.item.itemCode);
$itemPrice.val(ui.item.itemPrice);
$itemTotal.focus().val(ui.item.itemPrice); 
$itemQty.focus().val(1);
$itemQty.keyup(function() {
var Quantity = $itemQty.val();
var Prices = $itemPrice.val();
var ItemsTotal = Quantity * Prices;
$itemTotal.val(ItemsTotal.toFixed(2));
var Tsum = 0;
$('.itemTotal').each(function() {
if(!isNaN(this.value) && this.value.length!=0) {
Tsum += parseFloat(this.value);
$('#toTally').val(Tsum.toFixed(2))
}
}); 
});
return false;
}
}).data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.itemType + "</a>" )
.appendTo( ul );
};
$('.item-row:last', $itemsTable).after($row); 
$('#minusRow').show();
$('#resetTable').show();
$($itemType).focus();
}
return false;
});

私は配列を実装しました。ジャミングせずにIDとクラスで動作するようになったら、代わりにすぐに投稿します。

4

1 に答える 1

0

次のようにして問題を解決しました。

            ( function($) {
        var pounter = 1;
        $(document).ready(function(){
            var qounter = 1;
            var trounter = 1;

                //Count each instance and add number to Name
                $row.find('._ext_price_total_html').each(function() {
                $(this).attr({
                'name': function(_, name) {
                    return name + pounter },
                    });
                pounter++;
                })
            $row.find('.quantitys').each(function() {
                $(this).attr({
                'name': function(_, name) {
                    return name + qounter },
                    });
                qounter++;
                })  
            $('#quantity', function(){
                var Tsum = 0;
                $('[id^="_ext_price_total_html"]').each(function() {
                    if(!isNaN(this.value) && this.value.length!=0) {
                    Tsum += parseFloat(this.value);
                    }
                        $('.toTally').val(Tsum.toFixed(2))                                                          
                })
                })
                $('#quantity').change(function(){
                var Tsum = 0;
                $('[id^="_ext_price_total_html"]').each(function() {
                    if(!isNaN(this.value) && this.value.length!=0) {
                    Tsum += parseFloat(this.value);
                    }
                        $('.toTally').val(Tsum.toFixed(2))                              
                    })
                })
                $('#quantity').keyup(function(){
                var Tsum = 0;
                $('[id^="_ext_price_total_html"]').each(function() {
                    if(!isNaN(this.value) && this.value.length!=0) {
                    Tsum += parseFloat(this.value);
                    }
                        $('.toTally').val(Tsum.toFixed(2))
                })
                })
        //adjust/subtract from total when removeing row 

        $('#deleteRow').live('click',function(){
var delAsk = confirm('Remove this item?');
        if (delAsk)
        {
        $(this).parents('.jshop_prod_cart').remove();
            var Tsum = 0;
                $('[id^="_ext_price_total_html"]').each(function() {
                    if(!isNaN(this.value) && this.value.length!=0) {
                    Tsum += parseFloat(this.value);
                    }
                        $('.toTally').val(Tsum.toFixed(2))

                })
        }
        else
        {
            ('cancel');
            }
                });
于 2013-05-16T10:15:23.727 に答える