我正在使用Jquery UI Autocomplete,它运行良好,但我正在努力解决这个问题,并希望得到一些帮助。自动完成功能位于asp面板的文本框中,Enter键表单上的默认行为是提交表单。如果用户在“自动填充”文本框中键入内容并按Enter键,我希望启动自动完成Web服务并在Enter上返回结果。我在线阅读我想要处理自动完成的Keypress事件,我一直在尝试但不确定如何调用自动完成功能来触发按键,我在下面显示我的代码,如果有人知道如何做到这一点请通过代码中的示例显示,因为我在按键上调用函数时遇到了正确语法的问题,您的帮助表示,这是代码。
//Attach autocomplete to txtCity so user can lookup SPLCS by cities
var city;
var txtCity = $("[id$=txtAutoCity]")
$(txtCity).autocomplete({
source: function (request, response) {
request.term = request.term.replace(/[^a-zA-Z\s]+/, "")
$.ajax({
url: "../../Services.asmx/GetOfficesByCity",
data: "{ 'city': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data.d, function (item) {
if (data.d != undefined) {
return {
value: item.Display,
result: item.CommaDelimited
}
}
else {
return true;
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
},
autoFill: false,
minLength: 2,
delay: 800,
mustMatch: false,
selecFirst: false,
select: function (event, ui) {
var selectedObj = ui.item;
if (ui.item) {
city = ui.item.result.split(',')[0];
$("[id$=txtCity]").val(ui.item.result.split(',')[0]);
$("[id$=txtOffice]").val(ui.item.result.split(',')[1]);
$("[id$=txtDistrict]").val(ui.item.result.split(',')[2]);
}
},
// Any action to be performed once the auto complete list closes
close: function (event) {
}
}).keypress(function (e) {
if (e.keyCode === 13) {
//How to cancel default submit behaviour of form and call this
//autocomplete function to fire??
e.preventDefault();
//my_search_function($(txtCity).val())
}
});
答案 0 :(得分:2)
要解决此问题,您可以按照以下步骤在自动填充和新变量中添加搜索属性:
所以,结果是:
//将自动填充功能附加到txtCity,以便用户可以按城市查找SPLCS
var canPass = false;
var city;
var txtCity = $("[id$=txtAutoCity]")
$(txtCity).autocomplete({
source: function (request, response) {
request.term = request.term.replace(/[^a-zA-Z\s]+/, "")
$.ajax({
url: "../../Services.asmx/GetOfficesByCity",
data: "{ 'city': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data.d, function (item) {
if (data.d != undefined) {
return {
value: item.Display,
result: item.CommaDelimited
}
}
else {
return true;
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
},
autoFill: false,
minLength: 2,
delay: 800,
mustMatch: false,
selecFirst: false,
select: function (event, ui) {
var selectedObj = ui.item;
if (ui.item) {
city = ui.item.result.split(',')[0];
$("[id$=txtCity]").val(ui.item.result.split(',')[0]);
$("[id$=txtOffice]").val(ui.item.result.split(',')[1]);
$("[id$=txtDistrict]").val(ui.item.result.split(',')[2]);
}
},
// Any action to be performed once the auto complete list closes
close: function (event) {
},
search: function (value, event) {
if (!canPass) {
event.preventDefault();
}
else {
canPass = false;
}
},
}).keypress(function (e) {
if (e.keyCode === 13) {
canPass = true;
$(txtCity).autocomplete("search", ($txtCity).val());
}
});
因此,使用此代码,当您按ENTER键时,自动完成功能将开始搜索。
答案 1 :(得分:1)
您需要在自动完成对象上触发搜索功能。
($txtCity).autocomplete( "search", "TheSearchValueToSend" )
的更多信息
答案 2 :(得分:0)
请参阅已接受的答案,请忽略以下
首先,我建议恕我直言,你正在考虑这个错误的方法。自动完成的概念是用户继续键入,直到答案完全解决(或从给定的选项中选择他们想要的那个,顺便可以通过箭头键选择,用ENTER选择结果)。
那说如果你真的想要覆盖ENTER行为,我会建议通过“keydown”单独执行此操作,而不是作为自动完成小部件的一部分。下面的jsFiddle你应该知道要看什么:http://jsfiddle.net/2Z25f/
亲切的问候,
toepoke.co.uk