提前输入Bloodhound排序返回值。

时间:2016-12-26 16:08:49

标签: javascript php jquery typeahead.js bloodhound

我正在使用Twitter类型,但发现难以从mysql查询中划分结果。

我的json输出如下所示:{“id”:“1”,“name”:“Bravo”}

在当前状态下,typeahead中的结果显示了名称和id,我希望能够只显示名称,但输入的实际提交值为id。我的剧本很流畅:

<script type="text/javascript">
// Instantiate the Bloodhound suggestion engine
var suggestions = new Bloodhound({
    datumTokenizer: function (datum) {
        return Bloodhound.tokenizers.whitespace(datum.value);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: 'includes/livesearch.php?key=%QUERY',       
        wildcard: '%QUERY',
        filter: function (name) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(name, function (name) {
                return {
                    value: name
                };
            });
        }
    }
});
// Initialize the Bloodhound suggestion engine
suggestions.initialize();

// Instantiate the Typeahead UI
$('.typeahead').typeahead({
    hint: true,
    minLength: 2
}, {
    limit: 7,
    displayKey: 'value',
    source: suggestions.ttAdapter(),
});
</script>

我非常欢迎任何帮助或建议如何实现这一目标。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以创建一个对象来存储当前检索的值。在filter选项Bloodhound处将对象属性设置为name.name,将值设置为name.id

要返回并仅显示已检索name的{​​{1}}属性,请使用JSON的{​​{1}}参数检查对象的属性名称。如果属性为index,则返回$.map(),否则返回"name"

使用{value:name}事件使用null typeahead:selected的当前值作为属性参考,在<input type="hidden">中设置<form>元素的值先前存储的.typeahead初始返回值的对象。设置将值存储到空对象的变量引用。

input

filter

plnkr http://plnkr.co/edit/PJjzxemAQ9fO3P5YBfXi?p=preview