Javascript typeahead.js生成指定的div

Javascript typeahead.js生成指定的div,javascript,typeahead.js,Javascript,Typeahead.js,我一直试图在一个特定的html元素(比如div)中显示typeahead的建议,而不是在输入文本框下面的默认自动完成弹出窗口。是否有方法将建议重定向到自定义html元素 首先创建一个名为 .hide{display:none;}//css //javascript $(typeahead class or id name).typeahead( { hint: false, highlight: true, minLen

我一直试图在一个特定的html元素(比如div)中显示typeahead的建议,而不是在输入文本框下面的默认自动完成弹出窗口。是否有方法将建议重定向到自定义html元素


首先创建一个名为

   .hide{display:none;}//css
   //javascript
    $(typeahead class or id name).typeahead(
    {
        hint: false,
        highlight: true,
        minLength: 1,
        classNames: {
            menu: 'hide' // add class name to menu so default dropdown does not show
        }
    },{
        name: 'names',
        display: 'name',
        source: names,
        templates: {
            suggestion: function (hints) {
                return hints.name;
            }
        }
    }
);
$(typeahead class or id name).on('typeahead:render', function (e, datum) 
{
   //empty suggestion div that you going to display all your result
    $(suggestion div id or class name').empty();
    var suggestions = Array.prototype.slice.call(arguments, 1);
    if(suggestions.length){
        for(var i = 0; i < suggestions.length; i++){
            $('suggestion div').append(liveSearch.template(
                suggestions[i].name,
                suggestions[i].id));
        }
    }else{
        $('#result').append('<div><h1>Nothing found</h1></div>');
    }
});
.hide{display:none;}//css
//javascript
$(typeahead类或id名称)。typeahead(
{
提示:错,
推荐理由:没错,
最小长度:1,
类名:{
菜单:“隐藏”//将类名添加到菜单中,以便不显示默认下拉列表
}
},{
姓名:'姓名',
显示:“名称”,
资料来源:姓名,
模板:{
建议:功能(提示){
返回提示.name;
}
}
}
);
$(typeahead类或id名称)。on('typeahead:render',函数(e,datum)
{
//将显示所有结果的空建议div
$(建议div id或类名').empty();
var建议=Array.prototype.slice.call(参数,1);
如果(建议长度){
对于(var i=0;i<0.length;i++){
$('suggestion div').append(liveSearch.template(
建议[i].姓名,
建议[i].id];
}
}否则{
$('#result')。追加('未找到');
}
});
只需使用
$('input')。提前键入({menu:$('your div id');})

类名设置div中使用的类的名称:

   $('#frm-searchForm-q').typeahead({
    highlight: true,
    menu: $('.f-search__suggestion'), // my div
    classNames: {
        dataset: 'f-search__results',
        suggestion: 'f-search__item',
        highlight: 'highlight'
    }
  });`

对@JamesNorman的建议做了一些修改,这对我很有用:


span.twitter-typeahead{
宽度:100%!重要;
}
.twitter typeahead.hide-element.tt-open{
显示:无!重要;
}
#divToDisplaySuggestions::before{
颜色:#6f6f6f!重要;
内容:“未找到任何项目”;
身高:100%;
显示器:flex;
对齐项目:居中;
证明内容:中心;
}

/*
*带猎犬的Typeahead.js 0.11.1
* */
var_objData={};
_objData.myItems=[];
var$_myItemsList=$(“#divToDisplaySuggestions”),
$\u myItems=$(“#搜索输入”),
_myItems=新猎犬({
datumTokenizer:函数(数据){
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer:猎犬,标记,空白,
远程:{
通配符:“%QUERY”,
url:“/includes/ajax.php?ajxFetchQuery=%QUERY”,
转换:函数(_响应){
//注意:php文件上的响应是一个关联数组。
//将远程源JSON数组映射到JavaScript对象数组。
_objData.myItems=[];
返回$.map(_响应,函数(_项){
_objData.myItems.push(_item);
退货项目;
});
}
}
});
$\u myItems
.提前打印({
提示:错,
推荐理由:没错,
最小长度:3,
类名:{
菜单:“隐藏元素”//将类名添加到菜单中,以便不显示默认下拉列表。
}
},
{
名称:'th my items',
显示:“id”,
资料来源:_myItems,
限额:20
})
.在({
“typeahead:render”:函数(ev,selectedItemData){
$\u myItemsList.empty();
如果(_objData.myItems.length>0){
对于(var_i in_objData.myItems){
var_bkItem=_objData.myItems[_i];
变量$\bkItem=$(''+\bkItem.id+'

'); //附加到列表中。 $\u bkItem.appendTo($\u myItemsList); } $\u myItemsList.removeClass(‘空预订’); }否则{ $\u myItemsList.addClass(‘空预订’); } } }); $\u myItems .在({ keyup:函数(){ var _self=这个; if(!$(_self).val()){ $\u myItemsList.empty(); } 如果(_objData.myItems.length==0)和($(_self.val().length>=3)){ $\u myItemsList.addClass(‘空预订’); }否则{ $\u myItemsList.removeClass(‘空预订’); } } });