使用select2 ajax添加新文本时,以前的字段文本会消失

我在输入框上使用select2插件,根据用户输入的内容,使用AJAX从数据库中搜索项目。 它工作正常,我可以搜索它上面的项目,并在它可用时选择它,但我的问题是每当我在我的桌子上添加新行时,前一项目字段“文本”将消失,我正在制作一个表格,你可以动态添加/删除行,所以这是我的HTML:

 

和我的javascript:

 function addRow(){ var toBeAdded = document.getElementById('toBeAdded').value; if (toBeAdded=='') { toBeAdded = 2; } else if(toBeAdded>10) { toBeAdded = 10; } for (var i = 0; i < toBeAdded; i++) { var rowToInsert = ''; rowToInsert = ""; $("#tblItemList tbody").append( rowToInsert+ ""+ ""+ ""+ ""+ ""+ "

0.00

"+ ""+ "x"+ ""); rowArrayId = rowArrayId + 1; }; $(".itemSearch").select2({ placeholder: 'Select a product', formatResult: productFormatResult, formatSelection: productFormatSelection, dropdownClass: 'bigdrop', escapeMarkup: function(m) { return m; }, minimumInputLength:1, ajax: { url: '/api/productSearch', dataType: 'json', data: function(term, page) { return { q: term }; }, results: function(data, page) { return {results:data}; } } }); function productFormatResult(product) { var html = ""; html += "
"; html += product.itemName ; html += "
"; return html; } function productFormatSelection(product) { var selected = ""; return selected + product.itemName; } $(".qty, .price").bind("keyup change", calculate); };

这里有一些截图:

第一州: 原始状态

第二种状态:在输入框中搜索项目时 添加时

第三种状态:在我的桌子上添加新行后 添加新行后

可能是什么问题?

当添加行时,相同的id值用于输入元素。

最好在页面中包含唯一ID。

我猜想每次调用.select2()时,所有选择都会重置为原始状态。 您只能通过限制范围来调用新框上的构造函数。

要仅更新新的select2,您应该更改以下内容。 看到这个例子(未经测试,请调整):

 var newHtml = $("

Code to be appended here

"); newHtml.appendTo('#tblItemList tbody'); $('.itemSearch', newHtml).select2(/* ... */)

作为替代方案,您可以在调用构造函数之前通过将“selected”属性应用于所有框来尝试“冻结”状态。

看这个例子(未经测试,请调整)

 $('.itemSearch').each(function(){ var val = $(this).val(); $(this).find('option[value='+val+']').attr('selected', 'selected'); })