javascript - 使用 JQuery 根据 bootstrap-3-typeahead 下拉列表将值传递给多个动态创建的控件

标签 javascript jquery ajax bootstrap-typeahead

我正在使用 Laravel、JQuery 和 Bootstrap-3-typeahead 创建一个发票系统,并创建了一个按钮,该按钮可以在使用 JQuery 选择列表项时在每个表数据中动态添加带有文本输入的新表行。每行中的第一个文本输入具有 bootstrap-3-typeahead 功能:选择这样的项目后 creating invoice教程。

从自动完成文本输入下拉列表中选择后,它会自动填充价格、数量,并使用以下使用 JQuery 和 Ajax GET 方法的 Typeahead(afterSelect 方法)实现为输入的数量分配默认值“1”。

这是我的 html markup screenshot .

我的 boostrap-3-typeahead 的 JQuery 实现,以及根据 typeahead 下拉列表中所选项目生成自动价格、数量和总值。

var typeaheadSettings = {
  source: function (query, process) {
    return $.get(url, { query: query }, function (data) {
      console.log(data)
      return process(data);
    });
  },
  afterSelect: function (data) {
    console.log(data.sellPrice);          

    $('#itemPrice').val(data.sellPrice);
    $('#itemQuantity').val('1');
    var price = $('#itemPrice').val();
    var quantity = $('#itemQuantity').val();
    var subtotal = price * quantity;
    $('#itemSubtotal').val(subtotal);
  }
};

点击按钮添加新行的 JS 代码:

// Add Row
$(document).on('click', '#btnAddRow', function(event) {
  var i=$('#invoiceTable tbody tr').size();
  html = '<tr>';
  html += '<td><p class="text-center pt-xs"><input type="radio" name="sn" id="sn" value=""></p></td>';
  html += '<td><input type="text" name="productName[]" id="itemName'+ i +'" class="form-control typeahead twitter-typeahead" placeholder="Item name" autocomplete="off" data-fit-to-element="true" data-provide="typeahead"></td>';
  html += '<td><input type="text" name="price[]" id="itemPrice'+i+'" class="form-control text-right" placeholder="Item price" autocomplete="off" readonly></td>';
  html += '<td><input type="number" name="quantity[]" id="itemQuantity'+ i +'" class="form-control text-right" placeholder="Quantity"></td>';
  html += '<td><input type="text" name="subtotal[]" id="itemSubtotal'+ i +'" class="form-control text-right" placeholder="Subtotal" readonly></td>';
  html += '<td class="actions-hover actions-fade text-center"><p><a id="btnDelRow"><i class="fa fa-minus-circle fa-lg text-warning" id="iconDelRow"></i></a></p></td>';
  html += '</tr>';

  $('#invoiceTable tbody').append(html);
  i++;
  $('.typeahead').trigger('added');
});

这就是动态添加行的标记的样子,ID 后缀为整数“1,2”。如果动态添加另一行,则整数会递增,从而为所有重复控件提供唯一的 ID。 dynamically added tr screenshot

问题是,当我通过单击上图所示的“添加新行”按钮动态添加第二个控件时,动态添加的价格和数量输入控件无法获取新生成的值。相反,这些值出现在第一个已定义的行上。当我添加第三行及更多行时,也会发生同样的事情。 如果有人可以帮助我找到一种方法,我可以将选择下拉列表项后生成的值传递给右侧或适当的输入,我会很高兴。

最佳答案

您使用的 HTML 选择器似乎是一个 ID 选择器,每个文档应该是唯一的。这可以解释为什么会发生这种情况。

关于javascript - 使用 JQuery 根据 bootstrap-3-typeahead 下拉列表将值传递给多个动态创建的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512895/

相关文章:

javascript - 如何打印网页的一部分,包括所选内容

javascript - React 路由器在部署时不工作

javascript - Ajax Jquery CORS 不工作

javascript - 你如何在 JavaScript 中编写来自 JSON 的空键?

javascript - 如何使用连接Servlet的jQuery AJAX更改JSP页面内容?

Jquery 卸载不起作用

javascript - 以文本开始输入字段

javascript - 内部服务器错误 MAMP 使用 jQuery ajax 调用 PHP 函数

php - 在 jQuery Ajax 函数之后返回 HTML(使用 PHP)

javascript - 在数据表日期列中显示月份名称和年份