Twitter的引导到事先键入的内容填充的HREF(Twitter bootstrap Typeah

2019-10-17 17:46发布

我使用的是引导预输入,用Ajax调用,创造一种为我的网站即时搜索的。 这是所有工作的伟大,除了那只是事先键入的内容似乎能够处理的标题,而不是HREF中的事实。 例:

我的PHP代码是这样的:

$results = mysql_query("MY SELECT QUERY GOES HERE");

$array = array();

while ($row = mysql_fetch_assoc($results)){
    $array[] = $row['title'];
}

echo json_encode($array);

而我的Javascript是在这里:

$('#quickSearch').typeahead({
    source: function (query, process) {

        $.ajax({
            url: "my_php_file.php",
            type: "POST",
            data: 'query=' + query,
            dataType: 'JSON',
            async: true,
            success: function(data){
                  console.log(data)
                  process(data)
            }
        })
    }
});

...一起,这些结果在这个HTML:

<ul class="typeahead dropdown-menu" display: block;">
     <li data-value="Baltimore" class="active">
           <a href="#"><span class="highlighter">B</span>altimore</a>
     </li>
</ul>

该过程函数是某个内置自举,它需要每个结果的标题和填充一个下拉列表吧。 我希望能够从我的数据库获取HREF过,然后在下拉菜单中的链接将实际工作,而不是仅仅是作秀。

问题是,如果我写$array[] = array("title"=>$row['title'],"href"=>$row['link']");在我的PHP文件,它打破了一切作为推测处理()不能处理的附加数据。

有没有人有什么建议? 在事先键入的内容更多信息可以在这里找到: http://twitter.github.com/bootstrap/javascript.html#typeahead

谢谢

Answer 1:

您可以使用JSON格式的结果,并和定义一些选项,比如“匹配”,“分拣”,“更新”等:

PHP

$results = mysql_query("MY SELECT QUERY GOES HERE");
$array = array();
while ($row = mysql_fetch_assoc($results)){
    $array[] = array("title"=>$row['title'],"href"=>$row
}
echo json_encode($array);

使用Javascript:

$('#quickSearch').typeahead({
    source: function (query, process) {

        $.ajax({
            url: "my_php_file.php",
            type: "POST",
            data: 'query=' + query,
            dataType: 'JSON',
            async: true,
            success: function(data){
                       var resultList = data.map(function (item) {
                       var link = { href: item.href, name: item.title };
                       return JSON.stringify(link);
                     });
                return process(resultList);
            }
        })
    },

    matcher: function (obj) {
        var item = JSON.parse(obj);
        return ~item.title.toLowerCase().indexOf(this.query.toLowerCase())
    },

    sorter: function (items) {          
       var beginswith = [], caseSensitive = [], caseInsensitive = [], item;
       while (link = items.shift()) {
            var item = JSON.parse(link);
            if (!item.title.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(JSON.stringify(item));
            else if (~item.name.indexOf(this.query)) caseSensitive.push(JSON.stringify(item));
            else caseInsensitive.push(JSON.stringify(item));
        }

        return beginswith.concat(caseSensitive, caseInsensitive)

    },

    highlighter: function (link) {
        var item = JSON.parse(link);
        var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
        return item.title.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
            return '<strong>' + match + '</strong>'
        })
    },

    updater: function (link) {
        var item = JSON.parse(link);
       $('#quickSearch').attr('href', item.href);
       return item.title;
    }
});


Answer 2:

一注为item.title仅在AJAX源机能的研究这个完美的脚本。

代码的其余部分应item.name你定义:

var link = { href: item.href, name: item.title };


文章来源: Twitter bootstrap Typeahead to populate hrefs