jQuery 自动完成列表设置为 display:none;

Posted

技术标签:

【中文标题】jQuery 自动完成列表设置为 display:none;【英文标题】:jQuery autocomplete list set to display:none; 【发布时间】:2018-11-05 03:09:24 【问题描述】:

我在一页上有两个自动完成输入字段,每个都调用不同的源。

第一个输入字段在页面加载时呈现。第二个自动完成输入字段在 ajax 调用中返回并驻留在引导模式窗口中。

第一个自动完成功能很好:

$("#IdOfFirstInputField").autocomplete(
    source: (url),
    minLength: 3,
    select: function (event, ui) 
        alert("It works...");
    
);

第二个输入字段位于具有 ui-front 类的引导模式中。

我正在绑定自动完成功能,因为它是返回的 ajax 调用的一部分:

$(document).on("keydown.autocomplete", "#IdForSecondInput", function () 
    $(this).autocomplete(
        source: (url2),
        minLength: 3,
        select: function (event, ui) 
            alert("It works...");
        
    );
);

这些自定义 css 样式正在应用于两个自动完成输入字段:

.ui-autocomplete 
    position: absolute;
    z-index: 1000;
    cursor: default;
    padding: 0;
    margin-top: 2px;
    list-style: none;
    background-color: #ffffff;
    border: 1px solid #ccc
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    max-height: 300px;
    overflow-y: auto;
    overflow-x: hidden;

.ui-autocomplete > li 
    padding: 3px 20px;

.ui-autocomplete > li.ui-state-focus 
    background-color: #DDD;

.ui-helper-hidden-accessible 
    display: none;

虽然第一个自动完成按预期工作,但第二个仅在 <ul> 和列表项被附加到 DOM 的情况下工作。但是,<ul> 的样式设置为display:none;。如果我通过所选浏览器中的检查器删除此类,我可以看到列表看起来非常好。

知道为什么在正确返回 JSON 响应后将 <ul> 元素设置为 display:none; 吗?

看起来第二个输入字段在我停止输入后立即失去焦点,导致生成的 <ul> 默认为 display:none;

【问题讨论】:

display:none 附有内联元素或它的任何类获得display:none 属性? display:none; 正在为 <ul> 元素本身设置。不适用于每个 <li> 元素。 你能在某处复制它吗? 您能否检查ui-helper-hidden-accessible 类是否没有与<ul> 关联? 我刚刚注意到,第二个输入字段在我停止输入后立即失去焦点,导致结果默认为display:none; 【参考方案1】:

正如问题中所暗示的那样,问题确实是自动完成输入字段失去了焦点。由于自动完成输入字段是在模态窗口中检索的,因此它触发了一个 jQuery 函数,该函数将焦点放在模态窗口外的输入字段上。

虽然这个解决方案非常适合我的情况,但希望这个简短的说明仍然对遇到 jQuery 自动完成问题的人有帮助:-)

【讨论】:

【参考方案2】:

在花了几个小时寻找......这些库本机只附加到正文。找到的一个可行的解决方案是,为您的表单设置一个类。this examples works like a charm

Answered here

【讨论】:

以上是关于jQuery 自动完成列表设置为 display:none;的主要内容,如果未能解决你的问题,请参考以下文章

输入 jQuery 自动完成文本框时显示整个列表

将值设置为jquery(ver 1.7)autocomplete组合框

jQuery UI 自动完成宽度未正确设置

jQuery TagIt(自动完成)通过 AJAX 获取 JSON 列表

销毁jQuery自动完成功能

jQuery自动完成加载