jQuery UI自动完成向上/向下箭头未显示项目选择

问题描述 投票:0回答:1

我正在尝试使jQuery自动完成工作,并且在使用向上/向下箭头时不会显示/突出显示该项目。在我将event.preventDefault();放入focus事件之前,使用向上/向下箭头根本不执行任何操作。但是现在它会使用箭头在自动完成列表中上下移动,但是这些项目没有像您用鼠标“悬停”在项目上方时突出显示。因此,您可以选择带有箭头的项目,只是不知道自己在哪个项目上,因为当箭头在列表中移动时,它不会突出显示它们。

<input type="text" placeholder="Enter your school name..." name="school" id="school" class="schoolpicker school-input text-center form-control form-control-md-lg">

        $("#school").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/Search/Find",
                    type: "POST",
                    dataType: "json",
                    data: { prefix: request.term },
                    success: function (data) {
                        response(data);
                        $('#FindLoans').prop("disabled", true);
                    }
                });
            },
            appendTo: ".form",
            select: function (event, ui) {
                $("span#SchoolName").text(ui.item.Name);
                $("#school").val(ui.item.Name);
                $('#FindLoans').removeAttr("disabled");
                $.ajax({ -- get data here --});
                return false;
            },
            focus: function (event, ui) {
                event.preventDefault();
                $("#" + ui.item.SchoolID).attr("title", ui.item.Name + " - " + ui.item.Location);                    
            },
            autoFocus: true,
            selectFirst: true,
            change: function (event, ui) {}
        }).data("ui-autocomplete")._renderItem = function (ul, item) {
            return $("<li id=" + item.SchoolID + ">")
                .data("ui-menu-divider", item)
                .append(item.Name)
                .appendTo(ul);
        };

我尝试从另一个答案中使用这些类,但它们不起作用:

 .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
        cursor: pointer;
        background: #14aecf;
    }

    .ui-menu-item:active .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover {
        cursor: pointer;
        background: #14aecf;
    }

这是我的悬停CSS:

   .ui-menu-item {
        font-size: 18px;
        text-align: left;
        padding: 10px;
    }

        .ui-menu-item:hover {
            color: #fff;
            background-color: #14aecf;
            border-color: #14aecf;
            font-size: 18px;
            text-align: left;
        }

关于向上/向下为何不突出显示项目的任何想法?

这是我正在使用的jQuery UI CSS。如果这有所作为,我也正在使用Bootstrap。它在UI CSS之前。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css">

[此外,如果没有放置通用的CSS,自动完成功能的常规jQuery UI悬停功能将无法使用。我有这三个文件,我是否缺少CSS文件?

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.structure.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.theme.css"/>
jquery jquery-ui jquery-ui-autocomplete
1个回答
0
投票

我发现是导致问题的原因是我代码的结尾部分:

.data("ui-autocomplete")._renderItem = function (ul, item) {
        return $("<li id=" + item.SchoolID + ">")
            .data("ui-menu-divider", item)
            .append(item.Name)
            .appendTo(ul);
    }

我在某处找到了该代码,因此我使用了它,除了向上/向下箭头以外,它的设置方式都工作正常。

我所做的是将其删除,并添加带有$map的项目:

           source: function(request, response) {
                $.ajax({
                    url: "/Search/Find",
                    type: "POST",
                    dataType: "json",
                    data: { prefix: request.term },
                    success: function(data) {
                        $('#FindLoans').prop("disabled", true);
                        response($.map(data,
                            function(obj) {
                                return {
                                    label: obj.Name,
                                    value: obj.Name,
                                    description: obj.Location,
                                    id: obj.SchoolID
                                };
                            }));
                    }
                });
            },
            appendTo: ".form",

这已经解决了所有问题,现在上/下箭头都很好。

© www.soinside.com 2019 - 2024. All rights reserved.