【问题标题】:How do I implement Autocomplete without using a Dropdownlist?如何在不使用下拉列表的情况下实现自动完成?
【发布时间】:2011-06-07 12:22:09
【问题描述】:

如何在没有下拉列表的情况下实现自动完成?我希望自动完成以交替的灰色填充文本框中剩余的字母,如图所示

注意:我不是在寻找普通的JQuery UI Autocomplete plugin

【问题讨论】:

  • 您如何存储人们可以输入的可能条款?你会把它们放在某种 XML 或 JSON 文件中吗?
  • 我愿意使用任何东西来实现它。最初的自动完成实现返回一个带有搜索结果的 JSON 响应,但如果需要,我可以更改它以返回其他内容。这些术语是从解析术语本身的控制器返回的。这能回答你的问题吗?
  • 我想我最初的问题遇到的一个更普遍的问题是,在用户输入内容时,在输入框中显示灰色文本的最佳方式是什么,该文本会慢慢减少。有了它,我可以修改/扩展现有的 JqueryUI 或插件,以根据自动完成插件的结果在用户键入时更改灰色文本。如果这没有意义,请告诉我。
  • 我已在我的答案的修订版中添加了有关如何解决此问题的建议。

标签: javascript jquery autocomplete


【解决方案1】:

jQuery.suggest.js

这里的讨论导致了 jQuery 插件的开发, 你可以在这里找到:http://polarblau.github.com/suggest/

因此,下面的所有代码和示例都已过时,但可能仍然存在 对某些人来说很有趣。


我一直对这个问题的结果非常感兴趣,但似乎还没有找到任何东西。

我已经考虑编写自己的解决方案一段时间了,我可以告诉你我的想法(这只是我现在的想法,绝对没有尝试过):

HTML:

<div id="search-container">
    <input type="text" name="search" id="search" />
    <input type="text" disabled="disabled" id="suggestion" />
</div>

CSS:

#container {
    position: relative;
}

#search {
    position: relative;
    color: #000;
    z-index: 10;
    background: transparent;
    // border, etc....
}

#suggestion {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 0;
    color: #ccc;
    border: none;
    // ...
}

使用 Javascript 'onkeydown' 匹配列表中的第一个(排序标准在这里很重要)单词,该单词在单词开头共享已键入的字母,并将其放在禁用的输入中字段#suggestion。如果用户点击回车,来自#suggestion 的单词将被传输到#search 输入字段,并且可能是提交的表单。

如果我有时间我会尝试把它变成一个可以工作的 jQuery 插件——让我们看看。但也许你明白了?


编辑

我已经尝试了我的想法,它似乎 work in it's simplest form 还可以。我很快会在我的github account 上将它作为一个小型 jQuery 插件发布。完成后,我会在此处给您留个便条。或者继续自己尝试一下,让我知道它是怎么来的。

这是我最终使用的代码(其中一部分可能是动态生成的):

HTML:

<div id="search-container">
    <input type="text" name="search" id="search" />
    <input type="text" disabled="disabled" id="suggestion" />
</div>

CSS:

* { margin: 0; padding: 0; }

#search-container {
    position: relative;
}

#search-container input {

    padding: 5px;
    font-size: 1.2em;
    width: 200px;
}

#search {
    position: relative;
    color: #000;
    z-index: 10;
    border: 1px solid #666;
    background: transparent;
}

#suggestion {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 0;
    color: #ccc;
    background: transparent;
    border: 1px solid #fff;
}

JAVASCRIPT:

$(function() {

    var haystack = [
        "ActionScript",
        "AppleScript",
        "Asp",
        "BASIC",
        "C",
        "C++",
        "Clojure",
        "COBOL",
        "ColdFusion",
        "Erlang",
        "Fortran",
        "Groovy",
        "Haskell",
        "Java",
        "JavaScript",
        "Lisp",
        "Perl",
        "PHP",
        "Python",
        "Ruby",
        "Scala",
        "Scheme"
        ];

    $('#search').keyup(function(e) {
        // 'enter' key was pressed
        var $suggest = $('#suggestion');
        var code = (e.keyCode ? e.keyCode : e.which);
        if(code == 13) {
            $(this).val($suggest.val());
            $suggest.val("");
            return false;
        }

        // some other key was pressed
        var needle = $(this).val();

        // is the field empty?
        if (!$.trim(needle).length) {
            $suggest.val("");
            return false;
        }

        // compare input with haystack
        $.each(haystack, function(i, term) {
            var regex = new RegExp('^' + needle, 'i');
            if (regex.test(term)) {
                $suggest.val(needle + term.slice(needle.length));
                // use first result
                return false;
            }
            $suggest.val("");
        });
    });

});

【讨论】:

  • 非常好!昨天我试图根据我的一位同事的建议编写类似的代码,但我不得不处理另一个问题并将这个问题搁置一旁。我会试一试,并随时向您发布我认为会做出贡献的任何修改。
  • 太棒了!我现在正在开发插件。一旦在 Github 上有一个 repo,我会通知你,以防你想分叉它。
  • 这是代表:github.com/polarblau/suggest — 仍在进行中。总体方法发生了一些变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2014-08-24
  • 2022-12-22
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多