鼠标悬停时,jQuery-ui自动完成文本框关闭

时间:2013-08-13 06:38:22

标签: jquery-ui jquery-ui-autocomplete

我的页面上有一个相当简单的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);
};

一切似乎都按预期工作:

Working jquery-ui-autocomplete

问题在于,只要我将鼠标悬停在列表中的任何项目上,或者我尝试通过向上/向下箭头选择其中一个项目,列表就会关闭,而不会选择任何内容(或{{发送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);
        };

1 个答案:

答案 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>

这可能会导致您的问题 - 删除其中一个引用。