【发布时间】:2014-01-05 15:01:17
【问题描述】:
我在输入框中使用 select2 插件,根据用户在其上输入的内容使用 AJAX 从数据库中搜索项目。它工作正常,我可以在上面搜索项目并在可用时选择它,但我的问题是每当我在表上添加新行时,以前的项目字段“文本”都会消失,我正在制作一个你可以的表动态添加/删除行,所以这是我的 HTML:
<td><input name='product[0][name]' class='form-control col-lg-5 itemSearch' type='text' placeholder='select item' /></td>
还有我的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 = "<tr><td><input name='product["+rowArrayId+"][name]' class='form-control col-lg-5 itemSearch' type='text' placeholder='select item' /></td>";
$("#tblItemList tbody").append(
rowToInsert+
"<td><textarea readonly name='product["+rowArrayId+"][description]' class='form-control description' rows='1' ></textarea></td>"+
"<input type='hidden' name='product[" + rowArrayId + "][itemId]' id='itemId'>"+
"<td><input type='number' min='1' max='9999' name='product["+rowArrayId+"][quantity]' class='qty form-control' required />"+
"<input id='poItemId' type='hidden' name='product[" + rowArrayId + "][poContentId]'></td>"+
"<td><input type='number' min='1' step='any' max='9999' name='product["+rowArrayId+"][price]' class='price form-control' required /></td>"+
"<td class='subtotal'><center><h3>0.00</h3></center></td>"+
"<input type='hidden' name='product["+rowArrayId+"][delete]' class='hidden-deleted-id'>"+
"<td class='actions'><a href='#' class='btnRemoveRow btn btn-danger'>x</a></td>"+
"</tr>");
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 = "<table><tr>";
html += "<td>";
html += product.itemName ;
html += "</td></tr></table>";
return html;
}
function productFormatSelection(product) {
var selected = "<input type='hidden' name='itemId' value='"+product.id+"'/>";
return selected + product.itemName;
}
$(".qty, .price").bind("keyup change", calculate);
};
这里有一些截图:
第一个状态:
第二状态:在输入框上搜索项目时
第三种状态:在我的表上添加新行后
可能是什么问题?
【问题讨论】:
-
添加行时,输入元素使用相同的 id 值,这可能是导致它的原因。如果不是,那么您最好查看一下,因为 id 值在页面内应该是唯一的。
-
是的@melc 可能是导致问题的原因,感谢您分享您的想法,我会试一试。 :)
-
谢谢@melc,这是导致问题的相同 ID,我尝试在我添加的元素上添加动态 ID,然后将其用作我的 select2 上的选择器,现在工作正常!非常感谢! :D
-
嗨@melvnberd 你能发布你更新的代码吗?我遇到了同样的问题,但我尝试过的一些方法不起作用。
标签: javascript jquery html ajax