【发布时间】:2019-07-13 14:48:36
【问题描述】:
我正在努力制作一个带有动态字段的 PHP 表单,并在 JQuery 中自动填充其他字段,到目前为止,我可以添加新字段并且自动填充工作得很好,但仅适用于第一个字段。
自动填充下拉菜单仅出现在第一个输入上。 如何使所有动态表单输入与自动填充一起使用? 例如,我有 2 个字段。动态形式的 Items_name 和 Total_stock。如果我选择 Items_name,我想这样做。字段 total_stock 的自动填充。
这是我的 ajax 代码:
<script language="javascript">
function AddMasterDetail() {
var idf = document.getElementById("idf").value;
stre="<div class='form-group' id='srow" + idf + "'><div class='controls'>";
stre=stre+" <div class='col-xs-2'>";
stre=stre+"<select placeholder='Items Name' class='form-control input-sm' name='items_id[]' id='items_id' onchange='return autofill();'>"
+"<option value='' disabled selected>Please Select</option>"
+"<?php foreach($v_items_stock as $row){ echo "<option value='$row->items_id'>$row->items_name</option>"; } ?></select>";
stre=stre+"</div>";
stre=stre+"<div class='col-xs-2'>";
stre=stre+"<input class='form-control input-sm' id='total_stock' placeholder='Total Stock' name='total_stock[]' />";
stre=stre+"</div>";
stre=stre+"<div class='col-xs-1'> <button type='button' class='btn btn-danger btn-sm' title='Hapus Rincian !' onclick='removeFormField(\"#srow" + idf + "\"); return false;'><i class='glyphicon glyphicon-remove'></i></button></div>";
$("#divItems").append(stre);
idf = (idf-1) + 2;
document.getElementById("idf").value = idf;
}
function removeFormField(idf) {
$(idf).remove();
}
function autofill(){
var items_id = document.getElementById('items_id').value;
$.ajax({
url:"<?php echo base_url();?>transaction_sending/cari",
data:'&items_id='+items_id,
success:function(data){
var hasil = JSON.parse(data);
$.each(hasil, function(key,val){
document.getElementById('items_id').value=val.items_id;
document.getElementById('total_stock').value=val.total_stock;
});
}
});
}
</script>
【问题讨论】:
-
问题是您正在重新使用“items_id”作为许多元素的 ID。但 ID 必须是唯一的。当您运行
document.getElementById('items_id')(只能返回一个元素)时,代码无法知道您实际指的是具有该 ID 的多个元素中的哪一个。 -
您需要开始使用类,或者可能是数据属性,因此您可以唯一标识元素的每个副本并将特定操作应用于该副本,或者将相同的操作应用于所有这些立即(从您的描述中有点不清楚您正在尝试执行哪些任务)
-
谢谢 Adyson,我已经修改了我的问题。请看希望你明白我的意思。谢谢你..
-
P.S.
idf = (idf-1) + 2;是……奇怪。它有效,但基本上你拿走一个以便再次添加 2。那么为什么不直接将值加一呢?您可以将整行替换为idf++; -
好的,我现在有了更好的主意。但我对这部分有一个问题:
$.each(hasil, function(key,val){ document.getElementById('items_id').value=val.items_id; document.getElementById('total_stock').value=val.total_stock; });:我看到你在循环......所以你期望在hasil变量中有多少值?目前,您的循环每次都会覆盖第一个文本框。它的目的是什么?它应该依次覆盖所有行的框吗?我认为每个<select应该只影响它旁边的文本框??
标签: javascript jquery html ajax dynamic-html