任何可以帮助我的人都将非常感激。我好像陷入了困境。
我正在尝试将使用jquery.autocomplete插件从AJAX请求中检索到的响应数据分配给输入元素。我可以很好地获得响应数据,但是当我尝试将其插入'value'属性时,没有任何反应!
$('#btnPopulate').click(function() {
if ($('#list_length').val() != '') {
var length = $('#list_length').val();
var row='';
for (var i=0; i <= length; i++) {
row="<tr><td>"+i+"</td><td><input name='data[CompanyRanking]["+i+
"][company_id]' id='CompanyRanking"+i+
"CompanyId' value='1'></td><input type='hidden' name='data[CompanyRanking]["+i+
"][ranking]' id='CompanyRanking"+i+"Ranking' value='"+i+"'></tr>";
$('#ranking_table').append(row);
$("CompanyRanking"+i+"CompanyId").autocomplete({
serviceUrl:'/backend/companies/search',
minChars:2,
delimiter: null, // regex or character
maxHeight:400,
width:300,
deferRequestBy: 50, //miliseconds
// callback function:
onSelect: function(value, data){
alert('You selected: ' + value + ', ' + data);
$('#CompanyRanking'+i+'CompanyId').val(data);
alert('val: '+
$('#CompanyRanking'+i+
'CompanyId').val() + 'object?: '+
$('#CompanyRanking'+i+'CompanyId'));
}
});
};
//$('#btnPopulate').ac;
} else {
alert('You must first specify how many companies are in the list.');
};
return false;
});
答案 0 :(得分:2)
似乎您正在尝试提醒文本值而不是值本身。
alert('val: '+$('#CompanyRanking'+i+'CompanyId').text() + 'object?: '+$('#CompanyRanking'+i+'CompanyId'));
也许可以改为:
alert('val: '+$('#CompanyRanking'+i+'CompanyId').val() + 'object?: '+$('#CompanyRanking'+i+'CompanyId'));
答案 1 :(得分:2)
这似乎是一个范围问题。尝试围绕循环中i
的值创建一个闭包:
onSelect: (function(i) {
return function(value, data){
$('#CompanyRanking'+i+'CompanyId').val(data);
}
}(i))
可以找到更好的解释in this answer:
你在这里遇到的问题是 变量项随每个循环而变化。 在某些情况下引用项目时 稍后,它持有的最后一个值是 用过的。你可以使用一种叫做a的技术 闭合(基本上是一个功能 返回一个函数)以快速范围 变量不同。