繁体   English   中英

Jquery 自动完成输入表单,使用 Textpattern 类别列表作为源

[英]Jquery autocomplete for input form, using Textpattern category list as a source

我正在使用Textpattern CMS建立一个讨论站点——我牢牢掌握了 XHTML 和 CSS,以及 Textpattern 的模板语言,但是 PHP 和 Z9E13B69D1D2DA927102ACAAAF7 有点超出我的理解

在输入表单上开始一个新主题,用户需要从 5,000 多个选项列表中选择 select 一个类别。 使用 HTML select类型的input元素非常笨拙,但它可以工作。 我想使用某种 Javascript 魔法来显示一个text类型的输入元素,该元素将读取用户输入并显示来自可用类别的匹配或自动完成,将所需选项的value传递到相应的数据库字段中。

我见过几个 jquery 的自动完成插件,但这些说明的前提是您了解 Javascript 的工作原理。

正如我上面提到的,我很容易将类别列表生成为select类型的input元素,我可以使用 CSS 隐藏该元素。 是否可以使用text类型输入元素中的自动完成机制来控制选择列表输入? 我该怎么做?

编辑:更新为将 option.value 放在隐藏字段中

对的,这是可能的。 例如,如果您有以下 html 代码:

<input type="text" id="myTextBoxId"></input>
<!-- added hidden field to store selection option value -->
<input type="hidden" id="myHiddenField" name="selectedCategory"></input>
<select id="mySelectId" style="display: none">
    <option>Category 1</option>
    <option>Category 2</option>
    <option>...</option>
</select>

您可以使用以下 jquery 代码将此数据放入数组中:

var categories = $.map($("#mySelectId option"), function(e, i)
{
    return e; // Updated, return the full option instead its text
});

最后,您可以使用像这样的自动完成插件:

$("#myTextBoxId").autocomplete(categories,
{
    formatItem : function(item) { return item.text; } // Added
});

检查自动完成插件演示页面以查看您可以使用哪些选项(如 autoFill 和 mustMatch)。

您所要做的就是将其放入您的 html header (jquery js,自动完成 css 和 js,您的页面代码):

<link rel="stylesheet" type="text/css" href="jquery.autocomplete.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.autocomplete.js">
</script>
<script type="text/javascript">
    $(function()
    {
        // Updated script
        var categories = $.map($("#mySelectId option"),
            function(e, i) { return e; });
        $("#myTextBoxId").autocomplete(categories,
        {
            formatItem : function(item) { return item.text; }
        });
        // Added to fill hidden field with option value
        $("#myTextBoxId").result(function(event, item, formatted)
        {
            $("#myHiddenField").val(item.value);
        }
    });
</script>

好吧,这只是几行代码,但我不太喜欢“选择到数组”的东西。 如果可能,您应该创建一个页面,该页面返回与用户输入匹配的类别列表(再次,请查看演示页面以获取示例,不幸的是,我对 Textpattern 帮不上什么忙)。

当然,我没有测试,如果您有问题,请发表评论。 编辑:我做了测试,但在我的select中没有 5k 个项目;)

您可以设置自动完成以从 URL 获取其数据,因此我可以看到它在 Textpattern 中以多种巧妙的方式使用。

自动完成使用的数组格式如下所示:

["example_one", "example_two", ... ]

由于您有 5000 多个元素,您可能希望创建一个使用该格式简单列出它们的页面:

Page Autocomplete:
[
    <txp:article_custom form="array_form" ... />
]

Form array_form:
"<txp:title />",

要使用此页面而不是在 select 字段中包含所有项目,您需要设置自动完成:

$("#example").autocomplete("<txp:link_to_home />Autocomplete");

您可以使用缓存插件来加快加载速度。

为了加快速度,您可以使用带有自定义显示页面的文本模式搜索 function,而不是使用完整列表。 可能有一种方法可以设置自动完成功能,以便每当输入/删除新字符时,都会使用新的搜索字符串重新加载自动完成功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM