【问题标题】:Typeahead giving me error提前输入错误
【发布时间】:2014-04-09 18:00:06
【问题描述】:

正如我的标题所说,我在使用 bootstrap 中的 typeahead 插件时需要一些帮助。我是新手。 让我向您展示我到目前为止所做的尝试。

我的 HTML

<input type="text" class="form-control" data-provide="typeahead" name="pname" id="pname" autocomplete="off">

我的 js

$('#pname').typeahead({
                source: function (query, process) {
                states = [];
                map = {};
                return $.get('/'+url_root_path+'/misc/purchase/source.php', { query: query }, function (data) {
                    console.log(data);  
                    return process(data.pname);
                });
                }
            }); 

我的 Json 是

[{"pname":"Chettinad","id":"1"},{"pname":"mobile","id":"4"},{"pname":"iPhone","id":"14"},{"pname":"jalli","id":"15"},{"pname":"iphone5s","id":"16"},{"pname":"no image","id":"19"}]

我的 PHP 代码是

$req = "SELECT pname, id "
    ."FROM product "
    ."WHERE pname LIKE '%".$_REQUEST['query']."%' ";

$query = mysql_query($req);

while($row = mysql_fetch_array($query))
{
    $results[] = array('pname' => $row['pname'], 'id' => $row['id'] );
}

echo json_encode($results); 

每当我尝试在文本框中输入一些内容时。我在控制台中收到错误

Uncaught TypeError: Cannot read property 'length' of undefined 

请帮帮我。

【问题讨论】:

  • 在我的 JS 之后,我给出了我的 json 数据。请看一看。 @Aditya
  • 是的。我不能投票。它说upvote需要15个代表。 @Aditya

标签: javascript php twitter-bootstrap bootstrap-typeahead


【解决方案1】:

尝试使用 jQuery $.each 作为预输入,从 json 对象中创建一个 names 数组,如下所示:

JS:

   $('#pname').typeahead({
            source: function (query, process) {
            names = [];
            map = {};
           $.each(data, function (i, obj) {
                map = obj;

                if($.inArray(obj.pname, names)==-1)
                names.push(obj.pname);
            }); 
                 process(names);
            }
        }); 

这是DEMO

【讨论】:

  • 谢谢。在小提琴中工作得很好,但在我的浏览器中,它给了我错误“Uncaught TypeError: Cannot use 'in' operator to search'31' in [{"pname":"Chettinad","id":"1"} ] " @Aditya
  • @Eric :您必须使用 $.parseJSON(data) 将响应解析为 JSON :)
  • 很酷 :) 工作正常。我有一个疑问。当我输入'Che' 3 个字母时。名称 chettinad 在建议列表中显示 3 次。但实际上它是一个。你能弄清楚吗?
  • @Eric:它并没有像小提琴中那样显示,我猜你正在制作的数组有重复或可能被推了很多次。是吗? :)
  • 不,当我输入 3 个字母时,它正在查询,3 个字母 3 次,我的 php 文件返回 3 个 json 输出。
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2015-07-22
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多