使用此代码:
function setupRow(event, ui) {
var textbox, // how do i get to the textbox that triggered this? from there
// on i can find these neighbours:
hiddenField = textbox.next(),
select = textbox.parents('tr').find('select');
textbox.val(ui.item.Name);
hiddenField.val(ui.item.Id);
$.each(ui.item.Uoms, function(i, item){
select.append($('<option>' + item + '</option>'));
});
return false;
}
function setupAutoComplete(){
var serviceUrl = "/inventory/items/suggest";
$("input.inputInvItemName").autocomplete({
source: function(request, response) {
$.ajax({
url: serviceUrl,
data: request,
dataType: "json",
success: function(data) {
response($.map(data.InventoryItems, function(item) {
return {
value: item.Name
};
}));
},
select: function(event, ui) {
setupRow(event, ui);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
},
minLength: 3,
delay: 500
});
}
一切似乎都好。问题是select处理程序永远不会触发,甚至不会调用包装我的原始委托setupRow用于调试目的的匿名函数。
任何人都可以看到我的错误?
我还在评论中留下了一个问题:如何进入具有自动提示的文本框。这里不能使用id,因为这些文本框是多个并且是交互式生成的。还是有另一种方法可以做同样的事情吗?
感谢您的帮助!
答案 0 :(得分:1)
OP观点
var textbox, // how do i get to the textbox that triggered this? from there
// on i can find these neighbours:
我的观点
你试过吗,
var textbox = $(event.target);
或者你可以这样做,
OP观点
select: function(event, ui) {
setupRow(event, ui);
},
我的观点
select: setupRow;
然后
var textbox = this; // just a guess... wait..
答案 1 :(得分:0)
anyone can see my error?
我想你忘了把';'
$.ajax({
url: serviceUrl,
data: request,
dataType: "json",
success: function(data) {
response($.map(data.InventoryItems, function(item) {
return {
value: item.Name
}
}));
还是有另一种方法可以做同样的事情吗?
我认为你正在使用jquery ui autocomplete插件。如果是的话,你可以像这样进行检索。
$('.ui-autocomplete-input')
否则,您可以为这些文本框设置特定的类,并通过该类访问这些文本框。
答案 2 :(得分:0)
好的,使用
更近了一步inputs.bind("autocompleteselect", setupRow);
现在setupRow火了。
现在看来,成功的回调转换了数据,我得到了回复。我需要找到一种方法,在下拉列表中显示正确的值,而不会破坏请求响应......
有什么想法吗?