据我了解,typeahead.js 不允许对本地数据集进行过滤。请参阅http://twitter.github.io/typeahead.js/examples/上的第一个示例(国家搜索)结果是与您的查询匹配的前 10 个(取决于您的限制)结果。这个例子的数据集在这里:http: //twitter.github.io/typeahead.js/data/countries.json
通过在单个单词的开头找到您的查询来完成匹配:
搜索“a”将排在第二位,因为它是数据集中第二个条目,其中“arab”以“a”开头。所以“hon”会匹配“Hong Kong”,但“ong”没有匹配。“rael”与“Israel”等不匹配。
注意,在您的情况下,“WC2430L-SB”将被拆分为与“sb”匹配的两个“单个”单词“WC2430L”和“SB”。
当您在本地数据集上应用过滤器时,local: filter(_.values(res)),
过滤器将仅应用于初始化而不是每次搜索/输入。
在您的情况下,您将需要远程选项,例如:remote: '../data/films/queries/%QUERY.json',
. 您的数据库来自,$("#ProductSearch").data("url")
因此您将使用此 url 作为远程参数。
在这种情况下,$("#ProductSearch").data("url")
您http://www.yourdomain.com/database
应该编写如下代码:
<input class="typeahead" type="text" placeholder="products">
$('.typeahead').typeahead({
remote: 'http://www.yourdomain.com/database?q=%QUERY'
limit: 10
});
哪里http://www.yourdomain.com/database?q=%QUERY
应该返回数据列表,见:https ://github.com/twitter/typeahead.js
组成数据集的各个单元称为基准。数据的规范形式是具有值属性和标记属性的对象。value 是表示数据基础值的字符串,tokens 是单字字符串的集合,可帮助 typeahead.js 将数据与给定查询匹配。
这些数据应该是 json 编码,并且包含或以带有 %QUERY 开头的值开始。
在您无法操纵结果的情况下,您http://www.yourdomain.com/database
可以为它编写一个本地过滤器。
示例:
http://www.yourdomain.com/database
( $("#ProductSearch").data("url")
) 似乎返回一个 (json) 对象,因为您在其上使用了 _.values。
这将在 php 中模拟您的数据库(http://testdrive/database.php
在我的情况下可用),database.php:
<?php
$values = array('WC2430L-SB','WC2430R-SB','WC2730L-SB',
'SBB24','SBB27','SBB30','SBB33','SBB36','WC2730R-SB','WC3030L-SB');
echo json_encode((object)$values);
和过滤器filter.php:
<?php
function filter($value)
{
return (boolean)preg_match('/^'.$_GET['q'].'/i',$value);
}
$values = (array)json_decode(file_get_contents('http://testdrive/database.php'));
$values = array_filter($values, "filter");
echo json_encode((object)$values);
现在你可以使用:
$('.typeahead').typeahead({
name: 'Products',
remote: 'filter.php?q=%QUERY'
limit: 10
});
现在您的下拉列表将只包含以您的输入开头的结果。而不是local
选项remote
不是静态的,而是再次为每个输入调用远程 url。