2016-07-12 3 views
3

Добрый день. Сначала взгляните на мой скрипт.Typeahead TypeError: it.toLowerCase не является функцией

Мой 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 (line 4) HeadersPostResponseHTMLCookies

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

TypeError: b.toLowerCase is not a function

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

bootstr....min.js (line 1, col 2903

Я пытаюсь изменить bootstrap3-typeahead.js к bootstrap3-typeahead.min.js концу моя ошибка стала как этот

TypeError: b.toLowerCase is not a function ...on(a){var b=this.displayText(a);return~b.toLowerCase().indexOf(this.query.toLowe...

+0

что "~ это здесь? –

+0

Я не знаю. Он появляется из firebug – YVS1102

+0

print/console log your '~ it' сначала, затем примените toLowerCase(), отлаживайте его шаг за шагом –

ответ

2

как то, что я вижу из вашего 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); 
    }