自动完成仅适用于空格

时间:2016-05-31 20:41:05

标签: jquery twitter-bootstrap autocomplete typeahead.js

从以下jQuery代码中我初始化了typeahead插件

var users=new Bloodhound({

    datumTokenizer:Bloodhound.tokenizers.obj.whitespace('username'),
    queryTokenizer:Bloodhound.tokenizers.whitespace,

    remote: {
        url: 'users.php?query=%QUERY',
        wildcard: '%QUERY'
      }

});

users.initialize();

$("#SearchCustomer").typeahead({
    hint: true,
    highlight: true,
    minlength: 2,



},{
    name: 'users',
    display:'username',     
    source:users.ttAdapter(),
    templates: {
        suggestion: function (users) {
        return '<p><a href="index.php?userid='+users.CustomerId+'" style="color:inherit;text-decoration:none;width:100%">'+users.username+'</a></p>';
        }
    }

例如我的数据库是这样的:

1.Harley
哈利戴维森

当我在搜索框中输入“Har”时,“Harley”仅显示在建议中。 “Harley Davidson”只有在我输入“Harley”时才显示空格。有人可以建议如何克服这个错误吗?

这是我的users.php文件

<?php

header('Content-Type:application/json');

if(!isset($_GET['query']))
{
echo json_encode([]);
exit();
}
$mysqli=new PDO("mysql:host=127.0.0.1;dbname=website","root","");

$users=$mysqli->prepare("SELECT id,username FROM users WHERE username LIKE         :query");

$users->execute(['query'=>"{$_GET['query']}%"]);

echo json_encode($users->fetchAll()); 
?>     

2 个答案:

答案 0 :(得分:1)

尝试通过这样做来大写每个单词的第一个字符,你的问题将被清除

将哈利戴维森改为哈利戴维森。对表中的每个实例重复相同的操作......问候

答案 1 :(得分:0)

我复制了你的代码并添加了js文件并且有效。让我展示我的代码

的index.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title></title>
    <link rel="stylesheet" href="">
</head>
<body>
<input type="text" id="SearchCustomer">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
    <script src="typeahead.js-master/dist/typeahead.bundle.js"></script>
<script>
    var users=new Bloodhound({

    datumTokenizer:Bloodhound.tokenizers.obj.whitespace('username'),
    queryTokenizer:Bloodhound.tokenizers.whitespace,

    remote: {
        url: 'users.php?query=%QUERY',
        wildcard: '%QUERY'
      }

});

users.initialize();

$("#SearchCustomer").typeahead({
    hint: true,
    highlight: true,
    minlength: 2,



},{
    name: 'users',
    display:'username',     
    source:users.ttAdapter(),
    templates: {
        suggestion: function (users) {
        return '<p><a href="index.php?userid='+users.CustomerId+'" style="color:inherit;text-decoration:none;width:100%">'+users.username+'</a></p>';
        }
    }
});
</script>

</body>
</html>

users.php

<?php

header('Content-Type:application/json');

$users = array(
    array( 'CustomerId'=> 'example', 'username'=> 'Harley'),
    array( 'CustomerId'=> 'another example', 'username'=> 'Harley Davidson')
);

echo json_encode($users); 
?>

我没有使用数据库,因此来自数据库的数据可能会带来一些垃圾。

我希望这可以提供一些帮助。

玩得开心!

更新:

我更改了users.php,现在JSON没有垃圾..

<?php

header('Content-Type:application/json');

if(!isset($_GET['query']))
{
echo json_encode([]);
exit();
}
$mysqli=new PDO("mysql:host=127.0.0.1;dbname=example","root","");

$users=$mysqli->query("SELECT id,username FROM Users WHERE username LIKE '%".$_GET['query']."%'");


$array = [];
while($row = $users->fetch(PDO::FETCH_ASSOC)) {
    $array[] = $row;
}

// echo '<pre>';
// print_r($array);
echo json_encode($array); 

?>