[英]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.