ajax脚本仅适用于页面刷新时的第一行
我的脚本有问题。其目的是根据下拉列表中选择的值在字段中显示一些值。 当我触发使用相同字段但不同行 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
$(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.
答案是将:
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();
intovar id = $(this).val();
It seemed to be a problem with option:selected.