我有一个html表,可以通过单击按钮添加行。现在,每个表行包含8个td。根据从表行的第一个输入框(自动完成)中选择的值,该特定行中的td的其余部分将填充来自数据库的数据。现在我的代码一切正常,但唯一的问题是这只对第一个表行有效。如果我添加新行并选择新的行,那么该行中的td就不会被数据填充。我认为问题是我必须引用其中的每个tr和td,并通过它们循环代码。但我做不到。请帮帮我。
这是密码-
<table class="table table-bordered" id="stock" >
<thead>
<tr>
<td>Sr no.</td>
<td>Product Name</td>
<td>Description</td>
<td>Qty</td>
<td>Unit</td>
<td>Rate</td>
<td>Tax</td>
<td>Dis</td>
<td>Total</td>
<td><input type="button" name="add" id="add" value="+" class="btn btn-warning" /></td>
</tr>
</thead>
<tbody class="details">
<tr>
<td class="no">1</td>
<td><input type="text" name="items[]" id="items" class="form-control items" autocomplete="off" /></td>
<td><textarea name="size[]" id="size" class="form-control size" autocomplete="off"></textarea></td>
<td><input type="text" name="qty[]" id="qty" class="form-control qty" autocomplete="off"/></td>
<td><input type="text" name="unit[]" id="unit" class="form-control unit" autocomplete="off"/></td>
<td><input type="text" name="price[]" id="price" class="form-control price" autocomplete="off"/></td>
<td><input type="text" name="tax[]" id="tax" class="form-control tax" autocomplete="off" /></td>
<td><input type="text" name="dis[]" id="dis" class="form-control dis" autocomplete="off" /></td>
<td><input type="text" name="stkamt[]" id="amt" class="form-control amt" autocomplete="off" /></td>
<td><button class="btn btn-danger remove">X</button></td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
下面是我的添加按钮的作用-
$(function(){
$('#add').click(function(){
addnewrow();
});
function addnewrow(){
var n = ($('.details tr').length - 0)+1;
var tr = '<tr>'+
'<td class="no">'+n+'</td>'+
'<td><input type="text" name="items[]" id="items" class="form-control items" autocomplete="off" /></td>'+
'<td><textarea name="size[]" id="size" class="form-control size" autocomplete="off"></textarea></td>'+
'<td><input type="text" name="qty[]" id="qty" class="form-control qty" autocomplete="off"/></td>'+
'<td><input type="text" name="unit[]" id="unit" class="form-control unit" autocomplete="off"/></td>'+
'<td><input type="text" name="price[]" id="price" class="form-control price" autocomplete="off"/></td>'+
'<td><input type="text" name="tax[]" id="tax" class="form-control tax" autocomplete="off" /></td>'+
'<td><input type="text" name="dis[]" id="dis" class="form-control dis" autocomplete="off" /></td>'+
'<td><input type="text" name="stkamt[]" id="amt" class="form-control amt" autocomplete="off" /></td>'+
'<td><button class="btn btn-danger remove">X</button></td>'+
'</tr>';
$('.details').append(tr);
}
下面是当我从第一个td的autocomplete下拉列表中选择一个特定项并转到下一个字段时会发生的情况-
$('body').delegate('.items','blur',function(){
checkitems();
});
function checkitems(){
var items = $('#items').val();
if(items == ""){
}else{
$.ajax({
type: 'post',
url: 'itemcheck.php',
data: {key: items},
dataType:'json',
success: function(data) {
if(data){
var tr = $(this).closest('tr'); // here is the code for retrieving the values. i think here i need to make some changes
$('#price').val(data.rate);
$('#size').val(data.des);
$('#qty').val(data.qty);
$('#unit').val(data.unit);
}
else
{
$('#myitemmodal').modal("show");
}
}
});
}
}
在这里,ItMyCalp.pHp检查该项是否已经存在。如果它不存在,它将显示一个新的项目对话框,如果它存在,那么它会转到ITEMyValue.PHP来检索其余的值,并将其显示在该表行中的TD中。这个东西对于第一行来说很好,但是当我添加新行时,它不起作用。
我已经尽力提供了更多的信息,如果你还需要什么,请告诉我。提前谢谢。
最佳答案
正如我在评论中所说,IDs
必须是唯一的。在您的例子中,当您创建新行时,IDs
是相同的,并且只取第一个值(即使您在第二行、第三行等中写入)。要解决此问题,您需要:1)创建具有唯一ID的输入;2)检索数据并将其返回到正确的输入(不只是第一个输入)。
完整重写代码:
HTML端:
<table class="table table-bordered" id="stock" >
<thead>
<tr>
<td>Sr no.</td>
<td>Product Name</td>
<td>Description</td>
<td>Qty</td>
<td>Unit</td>
<td>Rate</td>
<td>Tax</td>
<td>Dis</td>
<td>Total</td>
<td><input type="button" name="add" id="add" value="+" class="btn btn-warning" /></td>
</tr>
</thead>
<tbody class="details">
<tr>
<td class="no">1</td>
<td><input type="text" name="items[]" id="items_1" class="form-control items" autocomplete="off" /></td>
<td><textarea name="size[]" id="size_1" class="form-control size" autocomplete="off"></textarea></td>
<td><input type="text" name="qty[]" id="qty_1" class="form-control qty" autocomplete="off"/></td>
<td><input type="text" name="unit[]" id="unit_1" class="form-control unit" autocomplete="off"/></td>
<td><input type="text" name="price[]" id="price_1" class="form-control price" autocomplete="off"/></td>
<td><input type="text" name="tax[]" id="tax_1" class="form-control tax" autocomplete="off" /></td>
<td><input type="text" name="dis[]" id="dis_1" class="form-control dis" autocomplete="off" /></td>
<td><input type="text" name="stkamt[]" id="amt" class="form-control amt" autocomplete="off" /></td>
<td><button class="btn btn-danger remove">X</button></td>
</tr>
</tbody>
<tfoot></tfoot>
</table>
JavaScript端:
$(function(){
$('#add').click(function(){
addnewrow();
});
});
function addnewrow()
{
var n = ($('.details tr').length - 0) + 1;
var tr = '<tr>'+
'<td class="no">' + n + '</td>' +
'<td><input type="text" name="items[]" id="items_' + n + '" class="form-control items" autocomplete="off" /></td>' +
'<td><textarea name="size[]" id="size_' + n + '" class="form-control size" autocomplete="off"></textarea></td>' +
'<td><input type="text" name="qty[]" id="qty_' + n + '" class="form-control qty" autocomplete="off"/></td>' +
'<td><input type="text" name="unit[]" id="unit_' + n + '" class="form-control unit" autocomplete="off"/></td>' +
'<td><input type="text" name="price[]" id="price_' + n + '" class="form-control price" autocomplete="off"/></td>' +
'<td><input type="text" name="tax[]" id="tax_' + n + '" class="form-control tax" autocomplete="off" /></td>' +
'<td><input type="text" name="dis[]" id="dis_' + n + '" class="form-control dis" autocomplete="off" /></td>' +
'<td><input type="text" name="stkamt[]" id="amt_' + n + '" class="form-control amt" autocomplete="off" /></td>' +
'<td><button class="btn btn-danger remove">X</button></td>' +
'</tr>';
$('.details').append(tr);
};
$('body').delegate('.items', 'blur', function(e) {
checkitems(e.currentTarget.id.split('_')[1]); // e.currentTarget.id.split('_')[1] - Target element ID
});
function checkitems(targetID)
{
var items = $('#items_' + targetID).val();
if (items != "") {
$.ajax({
type: 'post',
url: 'itemcheck.php',
data: {key: items},
dataType: 'json',
success: function(data) {
if (data) {
var tr = $(this).closest('tr'); // here is the code for retrieving the values. i think here i need to make some changes
$('#price_' + targetID).val(data.rate);
$('#size_' + targetID).val(data.des);
$('#qty_' + targetID).val(data.qty);
$('#unit_' + targetID).val(data.unit);
} else {
$('#myitemmodal').modal("show");
}
}
});
}
};
在本例中,我重写了代码,以便每个输入都具有附加到其ID的唯一属性(在本例中,是表中的行数,例如,
unit_1
而不是unit
)。关于javascript - 用在特定表行中选择的对应值填充表数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39545594/