1

スクリプトに問題があります。目的は、ドロップダウン選択の値に応じてフィールドにいくつかの値を表示することです。同じフィールドを持つフォームに新しい行を追加または削除する他のスクリプトを起動すると、行 ID が異なり、新しく追加された行に対して機能しなくなります。

<script>
<?php echo 'var lista = '.form_dropdown('produkt[]',$lista).';'?>
$(document).ready(function() {
    $('select[name="produkt[]"]').change(function() {
        var id = $('select[name="produkt[]"] option:selected').val();
        var par = $(this).closest('tr').attr('id');
        $.getJSON(
            '<?php echo $head['site_link'];?>index.php/faktura/pobierzProdukt/'+id,
            function(data){
                var id = $('#'+par);
                $('input[name="pkwiu[]"]',id).val(data.product_pkwiu);
                $('input[name="netto[]"]',id).val(data.product_netto);
                $('input[name="vat[]"]',id).val(data.product_vat);
                $('input[name="brutto[]"]',id).val(data.product_brutto);
                $('input[name="jedn[]"]',id).val(data.product_jedn);
            },
            'json'
        );
    });

    $('#dodajWiersz').click(function() {
        var liczba = $('#produkty tr').length;
        var inputArray = [
            '1',
            lista,
            '<input type="text" name="pkwiu[]" class="short" readonly="readonly"/>',
            '<input type="text" name="netto[]" class="short" readonly="readonly"/>',
            '<input type="text" name="vat[]" class="mini" readonly="readonly"/>',
            '<input type="text" name="brutto[]" class="short" readonly="readonly"/>',
            '<input type="text" name="jedn[]" class="mini" readonly="readonly"/>',
            '<input type="text" name="ilosc[]" class="short"/>',
            '<input type="text" name="knetto[]" class="short" readonly="readonly"/>',
            '<input type="text" name="kvat[]" class="short" readonly="readonly"/>',
            '<input type="text" name="kbrutto[]" class="short" readonly="readonly"/>'
        ];
        var tdString = '<td>'+inputArray.join('</td><td>')+'</td>';
        if($('#produkty tbody tr').length>0) {
            var row = '<tr id="wiersz-'+liczba+'">'+tdString+'</tr>';
            $('#produkty').find('tbody').append(row);
            $('#produkty tr:last td:first-child').text(liczba);
        }
        else {
            var row = '<tr id="wiersz-1">'+tdString+'</tr>';
            $('#produkty').find('tbody').append(row);
        }
    });

    $('#usunWiersz').click(function() {
       $('#produkty').find('tbody tr:last').remove(); 
    });
});
</script>

問題は $(document).ready() 関数にあると思います。しかし、私はそれを解決することはできません。

更新: DOM が更新されていないようです。Firebug では新しい HTML 構造を確認できますが、ソース ビューでは古い構造になっています。私はそれが重要だと思います。

4

2 に答える 2

0

$(this).closest('tr').attr('id') 常に同じ ID を持っている可能性があります

var 行 = ''+tdString+'';

あなたは常に同じIDを追加しています。

于 2011-05-17T13:01:58.943 に答える
0

答えは、変更することです:var id = $('select[name="produkt[]"] option:selected').val();var id = $(this).val(); option:selected に問題があるようです。

于 2011-05-18T06:33:51.860 に答える