ajax脚本仅适用于页面刷新时的第一行

发布于 2024-11-08 13:35:08 字数 2724 浏览 3 评论 0原文

我的脚本有问题。其目的是根据下拉列表中选择的值在字段中显示一些值。 当我触发使用相同字段但不同行 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 结构,但在源代码视图中是旧的结构。我认为这很重要。

I have a problem my script. It purpose is to display some values in fields depending on value from dropdown select.
When I fire other scripts that are adding or removing new rows into the form with the same fields, but different row id it stops working for the newly added rows.

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

I think the problem is with $(document).ready() function. But I can't solve it.

UPDATE:
It seems that DOM is not updated. I can see the new HTML structure in Firebug but in the source view is the old structure. I think it matters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

但可醉心 2024-11-15 13:35:08

$(this).closest('tr').attr('id') 你可能总是有相同的 id

var row = ''+tdString+'';

你总是附加相同的 id。

$(this).closest('tr').attr('id') you might always have the same id

and

var row = ''+tdString+'';

you are always appending the same id.

北笙凉宸 2024-11-15 13:35:08

答案是将: var id = $('select[name="produkt[]"] option:selected').val(); 更改为 var id = $(this) .val();
这似乎是选项的问题:选择。

the answer is to change: var id = $('select[name="produkt[]"] option:selected').val(); into var id = $(this).val();
It seemed to be a problem with option:selected.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文