0

Я хочу реализовать функцию для автозаполнения Textbox. В настоящее время я использую автозаполнение jQuery, но я не могу реализовать функциональность, связанную с задержкой поиска; Например, если я ищу «Новый», у меня будет список автозаполнения, имеющий [«Нью-Йорк», «Новый Южный Мемфис» .....] Теперь, если я нажму «S» и сразу ударил стрелку вниз, тогда я в конечном итоге выберите первый элемент, то есть «Нью-Йорк», а не получите результаты для городов, начинающихся с «Нового S». [Выполняется вызов веб-службы поисковых городов, начинающихся с «Новый S»] Я хочу достичь, чтобы заблокировать стрелку вниз до получения результатов. Если кто-нибудь может объяснить, что я должен сфокусировать для достижения этой функции, или это невозможно из-за асинхронного вызова веб-службы?Autocomplete Improvement

$(document).ready(function() { 
 

 
    $("#locations").keydown(function() { 
 

 
     var keyword = $("#locations").val(); 
 
     var url = 'http://autocomplete.wunderground.com/aq?format=json&cb=myCallbackFn&query=' + keyword; 
 
     $.ajax({ 
 
      type: 'GET', 
 
      url: url, 
 
      async: true, 
 
      dataType: 'jsonp', 
 
      error: function(e) { 
 
       console.log(e.message); 
 
      } 
 
     }); 
 
    }); 
 

 

 

 
}); 
 

 
var myCallbackFn = function(data) { 
 
    var cities = []; 
 
    for (i = 0; i < data.RESULTS.length; i++) { 
 
     if (data.RESULTS[i].type == 'city') { 
 
      cities.push(data.RESULTS[i].name); 
 
     } 
 
    } 
 

 
    $("#locations").autocomplete({ 
 
     source: cities 
 
    }).autocomplete("widget").addClass("fixed-height"); 
 
}
<html> 
 
\t <head> 
 
\t \t <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/ui-darkness/jquery-ui.min.css"> 
 
\t \t <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
 
\t \t <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js" ></script> 
 
\t \t <script type="text/javascript" src="custom.js"></script> 
 
\t \t 
 
\t \t <style> 
 
\t \t \t \t .fixed-height { 
 
\t \t \t \t \t padding: 1px; 
 
\t \t \t \t \t max-height: 200px; 
 
\t \t \t \t \t overflow: auto; 
 
\t \t \t \t } 
 
\t \t </style> 
 
\t </head> 
 
\t <body> 
 
\t \t \t <div class="ui-widget"> 
 
\t \t \t \t \t \t <label for="tags">Autocomplete: </label> 
 
\t \t \t \t \t \t <input id="locations" type="text" size="50"/> 
 
\t  </div> 
 
    </body> 
 
</html>

+0

вы можете попробовать, добавив это в первую строку прослушивания события keydown $ ('# locations'). Autocomplete ("destroy"); – NightsWatch

ответ

0

Один из способов завершения этого было бы либо удалить все предложения автозаполнения, когда новый запрос GET для предложений обжигают, или в качестве альтернативы, установить флаг не игнорировать вниз стрелки нажатий клавиш до запрос разрешен.

+0

Есть ли вероятность, что я могу использовать обещания дождаться разрешения запроса? – Bruce

+0

Да - это то, для чего предназначены обещания. –