我正在使用Textpattern模式CMS来构建一个讨论站点--我对XHTML和CSS以及Textpattern的模板语言有很强的掌握,但是PHP有点超出了我的狡猾。
在要开始一个新主题的输入表单上,用户需要从5000多个选项列表中选择一个类别。使用HTML select-type input元素是非常困难的,但它可以工作。我想使用某种Javascript魔术来显示一个text**-type输入元素,该元素将从可用的类别*读取用户输入和显示匹配或自动完成,将所需选项的value传递到适当的数据库字段。
我已经看到了一些用于jquery的自动完成插件,但说明的前提是您了解Javascript是如何工作的。
如前所述,我很容易将类别列表生成为select-type input元素,并且可以使用CSS隐藏该元素。是否可以使用text-type输入元素中的自动完成机制来控制选择列表输入?我该怎么做?
发布于 2009-06-20 17:31:21
您可以将自动完成设置为从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");您可以使用缓存插件来加快加载速度。
为了加快速度,您可以在自定义显示页中使用Textpattern搜索函数,而不是使用完整的列表。可能有一种方法可以设置“自动完成”,以便每当输入/删除新字符时,“自动完成”将使用新的搜索字符串重新加载。
发布于 2009-03-04 20:08:16
编辑:更新为将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头中(jquery、自动完成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项;)
https://stackoverflow.com/questions/612045
复制相似问题