我的页面上有一个相当简单的jquery-ui自动完成框。 HTML很简单,如下所示:
<div class="control-group">
<label for="addCampaignUser"></label>
<div class="controls">
<input id="addCampaignUser" />
<button id="addCampaignUserButton">Add User</button>
</div>
</div>
JavaScript有点复杂,但仍然不太糟糕:
$('#addCampaignUser').autocomplete({
minLength: 2,
source: function (request, response) {
var term = request.term;
if (term in cache) {
response(cache[term]);
return;
}
$.post("@Url.Action("ForCampaignAutoComplete", "CustomerUser")", { "searchTerm": request.term })
.done(function (data) {
console.log('{request: ' + JSON.stringify(request) + "}");
console.log('{data: ' + JSON.stringify(data) + "}");
cache[request.term] = data;
response(data);
})
.fail(function (err) {
console.error(err);
});
},
select: function (event, ui) {
console.log(ui.item ? "Selected: " + ui.item.Name : "Nothing selected, input was " + this.value);
},
close: function(event, ui) {
console.log("closed: " + event);
}
})
.data("ui-autocomplete")._renderItem = function (ul, item) {
return $("<li>").append("<a>" + item.Name + " (" + item.CustomerName + ")</a>").appendTo(ul);
};
一切似乎都按预期工作:
问题在于,只要我将鼠标悬停在列表中的任何项目上,或者我尝试通过向上/向下箭头选择其中一个项目,列表就会关闭,而不会选择任何内容(或{{发送1}}或select
个事件。
我已尝试删除focus
处理程序中item.Name周围的<a>
标记,如下所示:
.data("ui-autocomplete")
这解决了自动关闭问题,但随后没有任何选择。
我已经尝试禁用所有可能干扰的各种附加组件和库,但到目前为止还没有。我正在使用jquery-2.0.3.js和jquery-ui-1.10.3.js。
我做错了什么?
[编辑:根据要求包含整个页面的代码]
.data("ui-autocomplete")._renderItem = function (ul, item) {
return $("<li>").append(item.Name + " (" + item.CustomerName + ")").appendTo(ul);
};
答案 0 :(得分:4)
看起来你已经两次包含jQueryUI了。来到这里:
<script src="/Scripts/jquery-ui-1.10.3.js"></script>
再来一次:
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
这可能会导致您的问题 - 删除其中一个引用。