【发布时间】:2014-06-04 09:57:26
【问题描述】:
我正在尝试将 JSON 结果绑定到动态生成的文本框,它在单个文本框上运行良好,但不适用于动态生成的文本框,它在所有文本框上复制相同的值,我正在分享我到目前为止所做的事情:
查询:
function bindAutoComplete(classname) {
$("." + classname).autocomplete({
source: function (request, response) {
$.ajax({
url: '/Admin/Ticket/GetPart',
type: "GET",
dataType: "json",
data: { term: request.term },
success: function (data) {
if (data != null) {
if (data.length > 0) {
response($.map(data, function (item) {
return { label: item.PartNumber, value: item.PartNumber };
}))
}
else {
response([{ label: 'No results found.' }]);
}
}
}
})
},
});
}
function bindData() {
var errormsg = "";
var amount = $('.inputs').val();
$.ajax({
type: "GET",
url: '/Admin/Ticket/GetPart',
data: { 'term': amount },
dataType: "json",
success: function (data) {
if (data != null) {
if (data.length > 0) {
$('.buyingprice').val(data[0].Price);
}
else {
$('.buyingprice').val('');
}
}
},
error: function (jqXHR, exception) {
$('#error').html(jqXHR)
}
});
};
// fetch part number
$(document).ready(function () {
bindAutoComplete('inputs');
$('.inputs').keyup(bindData)
});
$("#AddMore").click(function () {
$("#maintable").each(function () {
var tds = '<tr>';
jQuery.each($('tr:last td', this), function () {
tds += '<td>' + $(this).html() + '</td>';
});
tds += '</tr>';
if ($('tbody', this).length > 0) {
$('tbody', this).append(tds);
// bindData();
bindAutoComplete('inputs');
$("#delete").fadeIn('200');
}
else {
$(this).append(tds);
bindAutoComplete('inputs');
// bindData();
}
});
});
HTML:
<table id="maintable">
<thead>
<tr>
<th>
Part No
</th>
<th>
BP
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input class="inputs" type="text" name="abcd" id="PartNumber23" style="width:130px;" />
</td>
<td>
<input class="buyingprice text-box single-line" id="BuyingPrice" name="BuyingPrice" type="text" value="" />
</td>
</tr>
</tbody>
</table>
输出图像
我从所有动态文本框的自动完成中获取结果,并将值分别绑定到动态文本框,但它在所有动态文本框上绑定相同的值。我已经搜索了互联网,但找不到任何解决方案。请指导我,我从 2 天起就被困在这里了
【问题讨论】:
-
正如@Shaz 建议的那样,您可以使用 POST 导致浏览器缓存 get 请求一段时间。如果您需要使用
GET,您可以添加一个动态参数,如'Admin/Ticket/GetPart?date' + (new Date())。浏览器会将每个请求都视为一个新请求。 -
@Nilesh 我已经尝试过该方法,但仍然遇到同样的问题,我想将值绑定到动态生成的文本框,我可以向您展示结果的图像吗?
-
如果更改方法类型,需要先清除浏览器缓存。点击 ctrl+f5 并使用 f12 网络流量监控工具确保您发送正确的请求并获取正确的数据..
-
@Shaz 我得到了正确的数据,我已经清除了浏览器缓存,它在一个简单的文本框上运行得非常完美,但是当我添加动态文本框时,只有自动完成在动态文本框上运行,但绑定不是处理动态texbox。我已经更新了问题并附上了你可以检查的图像,你可以看到 BP 在 keyup 事件上自动绑定,但它不适用于动态 BP 文本框
-
你在哪里使用 binddata 来动态创建文本框?
标签: jquery ajax asp.net-mvc json asp.net-mvc-4