【发布时间】:2016-10-05 12:42:41
【问题描述】:
我现在已经为此工作了 3 天,到处寻找解决方案,但没有成功。
我有一个动态 HTML 表格,其中连续有 5 个输入。输入以数组约定命名(即 name=part_no[]、name=cost[] 等)。使用 jQuery,在初始行的末尾会显示一个按钮,允许用户添加新行。添加新行时,会创建另一个按钮以允许用户删除该行。这是表格和“添加行”按钮的代码:
<div class="row">
<table id="part_numbers" class="table">
<tbody>
<tr>
<td width="16.66%">
<!--part number-->
<label for="part_no[]" class="control-label">Part No</label>
<input class="form-control part_no" type="text" name="part_no[]">
</td>
<td width="16.66%">
<!--list price-->
<label for="list_price[]" class="control-label">Suggested List Price</label>
<span class="calc_prices" data-toggle="popover" title="Calculated Pricing" data-content="This is where the data will go" data-placement="top"><i class="fa fa-question-circle" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="list_price[]">
</td>
<td width="16.66%">
<!--lot charge-->
<label for="lot_charge[]" class="control-label">Lot Charge</label>
<input class="form-control" type="text" name="lot_charge[]">
</td>
<td width="16.66%">
<!--lead time eng-->
<label for="lead_time_eng[]" class="control-label">Lead Time (ENG)</label>
<input class="form-control" type="text" id="lead_time_eng[]" name="lead_time_eng[]">
</td>
<td width="16.66%">
<!--lead time production-->
<label for="lead_time_prod[]" class="control-label">Lead Time (PROD)</label>
<input class="form-control" type="text" id="lead_time_prod[]" name="lead_time_prod[]">
</td>
<td width="16.66%"> </td>
</tr>
</tbody>
</table>
</div>
<div class="row">
<div class="col-sm-12">
<a href="javascript: void(0);" class="btn btn-success btn-sm hidden-print addCF">Add Row</a>
</div>
</div>
这是添加和删除新行的代码:
$('.addCF').click(function(e) {
e.preventDefault();
$('#part_numbers').append('<tr><td width="16.66%"><input class="form-control part_no" type="text" name="part_no[]"></td><td width="16.66%"><input class="form-control" type="text" name="list_price[]"></td><td width="16.66%"><input class="form-control" type="text" name="lot_charge[]"></td><td width="16.66%"><input class="form-control" type="text" name="lead_time_eng[]"></td><td width="16.66%"><input class="form-control" type="text" name="lead_time_prod[]"></td><td width="16.66%"><a href="javascript:void(0)" class="btn btn-danger btn-sm hidden-print remCF">Remove</a></td></tr>');
});
$('#part_numbers').on('click', '.remCF', function(e) {
e.preventDefault();
$(this).parent().parent().remove();
});
当用户开始在 part_no 字段中输入时,会触发自动完成并显示匹配的零件编号列表。选择零件后,我将使用计算出的价格更新弹出框。
我没有问题将数据放在第一行 - 自动完成功能完美,并且弹出框已更新。 但是当添加新行并且我开始在“part_no[]”字段中输入时,不会触发自动完成。我已经尝试了所有我能想到的迭代输入字段以触发自动完成的变体,但没有任何效果。
这是自动完成代码。 jQuery 版本是 2.03。 jQuery UI 版本是 1.12.1。非常感谢任何帮助:
$("[name^=part_no").each(function(index) {
$(this).on('focus',function() {
$(this).autocomplete({
delay: 500,
minLength: 3,
autoFocus: true,
source: "items.php",
select: function(event, ui) {
event.preventDefault();
var item_no = ui.item.label;
var std_cost = ui.item.std_cost;
var std_part_price = ui.item.std_part_price;
var custom_price = ui.item.custom_price;
var existing_price = ui.item.existing_price;
$(this).val(item_no);
$('.calc_prices').popover("destroy").popover({
trigger: 'manual'
}).popover("show").on('shown.bs.popover', function() {
$('.popover-title').text("Calculated Pricing for " + item_no);
$('.popover-title').append('<button type="button" class="close popovercloseid">×</button>');
var popover = $(this);
var contentEl = popover.next(".popover").find(".popover-content");
contentEl.html("Cost: " + std_cost + "<br />Standard: " + std_part_price + "<br />Custom: " + custom_price + "<br />Existing: " + existing_price);
})
return false;
},
change: function(event, ui) {
event.preventDefault();
var item_no = ui.item.label;
var std_cost = ui.item.std_cost;
var std_part_price = ui.item.std_part_price;
var custom_price = ui.item.custom_price;
var existing_price = ui.item.existing_price;
$(this).val(item_no);
$(".calc_prices").popover("destroy").popover({
trigger: 'manual'
}).popover("show").on("shown.bs.popover", function() {
$(".popover-title").text("Calculated Pricing for " + item_no);
$(".popover-title").append('<button id="popovercloseid" type="button" class="close">×</button>');
var popover = $(this);
var contentEl = popover.next(".popover").find(".popover-content");
contentEl.html("Cost: " + std_cost + "<br />Standard: " + std_part_price + "<br />Custom: " + custom_price + "<br />Existing: " + existing_price);
})
return false;
}
});
});
});
【问题讨论】:
标签: jquery jquery-ui autocomplete