如何在侧面单击时关闭自动完成下拉列表

时间:2013-08-19 18:05:33

标签: javascript jquery jquery-ui jquery-plugins jquery-autocomplete

我用户jquery autocomplete获取一些结果并显示结果,但是当我点击侧面时无法关闭带有返回结果的下拉列表。

$(function () {
            $("#search").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: '@Url.Action("TestAutoComplete", "Home")', type: "POST", dataType: "json",
                        data: { query: request.term },
                        success: function (data) {
                            response($.map(data, function (item) {

                                return {
                                    label: item.Title
                                };
                            }));
                        }
                    });
                },
                minLength: 1,
                select: function (event, ui) {
                    onItemSelect(ui.item);
                },
                open: function () {
                    $(this).removeClass('ui-corner-all').addClass('ui-corner-top');
                    $(this).autocomplete('widget').css('z-index', 999999);
                },
                close: function () {
                    $(this).removeClass('ui-corner-top').addClass('ui-corner-all');
                }
            })
        .data('ui-autocomplete')._renderItem = function (ul, item) {
            return $('<li>')
                .data('autocomplete-item', item)
                .append('<a href="#"><p  >' + item.label + "</p></a>")
                .appendTo(ul);
        };
        });

4 个答案:

答案 0 :(得分:1)

非常愚蠢的错误。

 $("#search").autocomplete({...

应该是

 $(".search").autocomplete({...

它有效。

答案 1 :(得分:0)

仅仅通过查看你的js,我的标记并不完全清楚,但它会是这样的:

$("html").on("click.autocomplete", function(e){
  var $targ = $(e.target || event.srcElement);
  if ( !$targ.is( /* searchlist */ ) || !$( /* searchlist */ ).has( $targ ).length ) {
    //Close autocomplete
    $("html").off(".autocomplete");
  }
});

答案 2 :(得分:0)

你以某种方式让我们对你的实现视而不见,但假设一个好的模式,解决方案就是,如果点击的元素(e.target)在文档上的每次点击都检测到,在搜索内部关闭搜索框。

$(document).on('click', function(e)
{
    var jqTarget = $(e.target);
    if ( !jqTarget.closest('#search').length ) 
    {
        $("#search").hide();
    }
});

答案 3 :(得分:0)

var that = $('.autocomplete'); //Define this somewhere in the page to refer later

$('document').on('mousedown', function(e){
if ($(e.target).closest('.autocomplete:not(:visible)').length != 0) {
        that.hide();
    }
});