【问题标题】:Typeahead TypeError: it.toLowerCase is not a functionTypeahead TypeError:it.toLowerCase 不是函数
【发布时间】:2016-11-14 04:31:42
【问题描述】:

美好的一天。请先看看我的剧本。

我的 JS

$(document).ready(function(){    
    $("#outlet").typeahead({
         source: function(query, process) {

                $.ajax({
                 url: '<?=base_url();?>graph/outletlists',
                 data: {outlets:$("#outlet").val()},
                 type: 'POST',
                 dataType: 'JSON',
                 success: function(data) {
                          process(data);
                          console.log(data);
                        }               
                    });
         },
        minLength: 2
    });
}); 

我的控制器

function outletlists()
    {
        extract(populateform());
        $hasil = $this->modelmodel->showdata("SELECT Outlet from transaksi where outlet like '%".$outlets."%' group by Outlet");
        echo json_encode($hasil);
    }

和我的表格

 <div class="form-group">
         <label class="col-sm-3 control-label">Outlet</label>
              <div class="col-sm-5">
                   <input type="search" id="outlet" class="form-control" placeholder="Search..." data-provide="typeahead" />
              </div>
   </div>

所以,我正在使用Bootstrap3-typeahead。从我上面的脚本中我得到了这个错误

来自console.log(data) 我已经得到了我想要的结果。所以我的问题是我看不到任何建议,然后我从firebug 收到了这个错误

return ~it.toLowerCase().indexOf(this.query.toLowerCase());

这是我输入AR时得到的结果

[{"Outlet":"K-AR3"},{"Outlet":"K-AR4"},{"Outlet":"K-ARN2"},{"Outlet":"K-ARN3"}]

任何帮助将不胜感激,抱歉我的英语不好。

我试着让它像http://twitter.github.io/typeahead.js/examples/的例子一样

var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California',
  'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii',
  'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana',
  'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota',
  'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',
  'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota',
  'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island',
  'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont',
  'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'
];
$(document).ready(function() {
    $("#outlet").typeahead({
        autoSelect: true,
        minLength: 2,
        delay: 400,
        source: states
    });
});

它有效。

来自firebug的结果

POST http://localhost:84/new_store/graph/outletlists 200 OK 375ms
jquery-....min.js(第 4 行)HeadersPostResponseHTMLCookies

[{"插座":"K-AR3"},{"插座":"K-AR4"},{"插座":"K-ARN2"},{"插座":"K-ARN3" }]

TypeError: b.toLowerCase 不是函数

...on(a){var b=this.displayText(a);return~b.toLowerCase().indexOf(this.query.toLowe...

bootstr....min.js(第 1 行,第 2903 列

我尝试将我的bootstrap3-typeahead.js 更改为bootstrap3-typeahead.min.js 结束我的错误变成这样

TypeError: b.toLowerCase 不是函数 ...on(a){var b=this.displayText(a);return~b.toLowerCase().indexOf(this.query.toLowe...

【问题讨论】:

  • 这里的“~it”是什么?
  • 我不知道。它从萤火虫中出现
  • 打印/控制台先记录你的'~it',然后应用到LowerCase(),逐步调试

标签: jquery ajax twitter-bootstrap codeigniter-3


【解决方案1】:

正如我从您的console.log() 中看到的那样。你明白了。

[{"Outlet":"K-AR3"},{"Outlet":"K-AR4"},{"Outlet":"K-ARN2"},{"Outlet":"K-ARN3"}]

你只需要

[{"K-AR3"},{"K-AR4"},{"K-ARN2"},{"K-ARN3"}]

所以试着把你的控制器改成

function outletlists()
    {
        extract(populateform());
        $hasil = $this->modelmodel->showdata("SELECT Outlet from transaksi where outlet like '%".$outlets."%'  group by Outlet");
        $data = array();
        foreach ($hasil as $hsl)
            {
                $data[] = $hsl->Outlet;
            }
        echo json_encode($data);
    }

【讨论】:

【解决方案2】:

即使有一个公认的答案,我也会提供另一个答案,因为这个答案不适用于我的情况。原来我的数组元素之一是空值。所以我重写了我的数据查询来过滤掉空值。

【讨论】:

    【解决方案3】:

    尝试将以下示例用作静态代码,然后使其成为动态代码 示例:http://twitter.github.io/typeahead.js/examples/

    【讨论】:

    • 这是个好消息
    猜你喜欢
    • 2015-02-13
    • 2023-04-05
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多