【发布时间】:2014-12-25 18:56:33
【问题描述】:
所以我有一个可以添加新行的表。如果我手动输入数量和价格,则使用此 javascript 代码计算总数。
function addRow() {
addTableRow($('.table tbody'));
}
function removeRow() {
var par = $(this).parent().parent();
var tableSize = $('.table tbody tr').length;
if(tableSize == '1'){
alert('You must have one row');
return false;
}
par.remove();
};
function calculateRow() {
var par = $(this).parent().parent();
var price = $(par).find('.price').val();
var qty = $(par).find('.qty').val();
var total = price*qty;
$(par).find('.total').val(total.toFixed('2'));
}
$('.table tbody').on("click", ".removeRow", removeRow);
$('.table tbody').on("blur", ".qty", calculateRow);
function addTableRow(table) {
$(table).append(
"<tr>" +
"<td><input name='item_number[]' type='text' class='id form-control'></td>" +
"<td><input name='item_name[]' type='text' class='name search form-control'></td>" +
"<td><input name='item_price[]' type='text' class='price form-control price'></td>" +
"<td><input name='item_qty[]' type='text' class='form-control qty'></td>" +
"<td><input name='item_total[]' type='text' class='form-control total'></td>" +
"<td class='text-center' style='vertical-align:middle;'><a href='#' class='text-success removeRow'><i class='fa fa-trash-o'></i></a></td>" +
"</tr>");
auto();
}
现在我已将 Jquery UI AutoSuggest 添加到我的表中并完成了它,因此我可以通过选择产品来填写商品编号、商品名称、商品数量和商品价格。使用下面的javascript:
function auto() {
var ac_config = {
source: "/admin/items/fetch_items",
select: function(event, ui){
var item = ui.item;
if(item) {
$(".id").val(item.id);
$(".price").val(item.price);
$(".qty").val('1');
var par = $(".qty").parent().parent();
var price = $(par).find('.price').val();
var qty = $(par).find('.qty').val();
var total = price*qty;
$(par).find('.total').val(total.toFixed('2'));
}
},
minLength: 1,
};
$(".search").autocomplete(ac_config);
}
现在您可以看到,我需要计算行总数并填充它。正如上面的代码,默认情况下由 html 生成的初始行被正确计算。但是,一旦我添加了一个新行并尝试自动填充并计算总数,第一行就会随着我刚刚添加的新行发生变化。
如何让 javascript 在我刚刚使用 jQuery UI 自动填充的行上运行?
【问题讨论】:
-
像
$(".id")这样的选择器会在页面中找到所有相同的类。您需要定义一种针对特定行的方法。可以通过在行上切换一个类,或者总是填充最后一行。你在寻找什么行为? -
切换听起来更简单也更合乎逻辑,因为我们可能会返回一行来同时更改数量或项目。
标签: javascript jquery html codeigniter twitter-bootstrap