我被这个问题难住了,我已经花了几个小时,试图让jQuery自动完成,以便在建议列表中单击项目时转到网站上的另一个页面。
有人知道怎么做吗?这是我的代码:
$(':input[data-autocomplete]').autocomplete({
source: $(':input[data-autocomplete]').attr("data-autocomplete"),
delay: 0,
select: function (event, item) {
//window.location.replace("http://www.example.com/Profile/Details/1");// Works but totally unacceptable, browser history lost etc..
//alert("Item Clicked"); //Fires Ok
}
}).data("autocomplete")._renderItem = function (ul, item) {
var MyHtml = '<a id="ItemUrl" href="/Profile/Details/' + item.PartyId + '"' + ">" +
"<div class='ac' >" +
"<div class='ac_img_wrap' >" +
'<img src="../../uploads/' + item.imageUrl + '.jpg"' + 'width="40" height="40" />' +
"</div>" +
"<div class='ac_mid' >" +
"<div class='ac_name' >" + item.value + "</div>" +
"<div class='ac_info' >" + item.info + " PartyId :" + item.PartyId + "</div>" +
"</div>" +
"</div>" +
"</a>";
return $("<li></li>").data("item.autocomplete", item).append(MyHtml).appendTo(ul);
};
正如你所看到的,我在_renderItem
事件中使用了自定义HTML,我的自定义HTML创建了一个锚标记,id是从源代码传入的,这看起来不错,链接在浏览器左下角正确形成(我使用的是Chrome)
<a href='/Profile/Details/id' >some other divs & stuff</a>
问题是,当我点击链接时,什么都没有发生,我已经尝试使用select事件,但项为null,因此无法获得item.PartyId
来强制手动跳转。
如何使点击事件正常工作?
回答它可能会很晚,但我用以下代码完成了这项工作:
$(document).ready(function() {
$('#txtSearch').autocomplete({
minLength: 3,
source: "handlers/SearchAutoComplete.ashx?loc=" + $('#hfLocation').val(),
select: function(event, ui) {
doSearch(ui.item.label, ui.item.city);
}
});
});
function doSearch(term, location) {
window.location.href = 'Search.aspx?q=' + term + '&loc=' + location;
}
经过几天的努力(不是大多数),我得出了以下结论:
$(':input[data-autocomplete]').autocomplete({
source: $(':input[data-autocomplete]').attr("data-autocomplete"),
delay: 0,
select: function (event, ui) {
var q = ui.item.PartyId;
if (q != "") {
$('#hidPID').val(q);
$('#ac_submit').trigger('click');
}
}).data("autocomplete")._renderItem // -->>> the rest of the code same as above
问题是(event,item)本应是(event,ui),为了获得项的值,您使用ui.item.PartyId(在我的情况下,PartyId在源代码中声明:如上)
所以在我最初的表单上,我有两个html输入1-隐藏ID,2-提交&正如你可以在上面的select:函数中看到的,我设置了ID&触发提交(所以现在用户只选择一个项目,然后转到执行重定向到视图的控制器,而不是这个代码,因为在这种情况下使用位置似乎不正确)
我希望这能节省一些时间,因为jQuery自动完成文档不会太清楚。