2014-10-31 3 views
2

, поэтому я искал в Google, искал здесь, ездил везде, и я не могу найти ответ. Я использую автозаполнение jQuery UI для поиска списка номеров идентификаторов элементов. Они могут быть любой длины от 1 - 99999.Автозаполнение не срабатывает при первом вводе

выпуска:

Когда я типа «2», например, ничего не происходит, то я ударил забой и типа «2» снова и на этот раз, все, что, начиная с 2 появляется ниже, и событие отображается в «Сетевом списке» в инструментах разработчика. Кроме того, когда я ищу 1, появляется только 1, но он не выполняет поиск, он просто плюет обратно на входное значение. но когда я нажимаю backspace и снова набираю 1, поиск срабатывает, и я получаю те же результаты, что и в случае с 2. Обычно независимо от того, какое число я набираю, он должен просто запускать по умолчанию, не так ли? Как исправить это и правильно обработать автозаполнение.

КОД:

$('.item-inventory').on('keyup', '#item_num', function(){ 
     //var search = $(this); 
     var itemname; 
     var itemprice; 
     var itemdesc; 
     $(this).autocomplete({ 
      delay : 100, 
      source: function(request, response){ 
       $.ajax({ 
        url: '../assets/server/orders/item_search.php', 
        dataType: 'JSON', 
        data: {search: request.term}, 
        success: function (data){ 
         var keys = data.search; 
        // $('#item-name').val(data.search[0].item); 
        // itemPrice = data.search[0].price; 
        // itemDesc = data.search[0].desc; 
         response($.map(keys, function(i){ 
          return{ 
           label : i.id 
          }; 

         })); 

        } 
       }); 
      }, 
      minLength : 1 
     }); 
     //$('#item-search-results').removeClass('hidden'); 
     $(this).on('autocompleteselect', function(event, ui){ 
      $('#item-search-results').removeClass('hidden'); 
     }); 
    }); 
+2

Повторное подключение 'autocomplete' снова и снова на каждом событии' keyup'. Это не способ пойти :(вы можете предоставить образец HTML тоже? –

+0

Я не видел проблемы, когда я использую этот метод в другом поле ввода. –

+0

Это не значит, что это: a) правильно или b) что это изменение решение вашей проблемы :) –

ответ

1

В основном вы подключаете автозаполнения после первого нажатия клавиши (что слишком поздно для первого нажатия клавиши). Вы также подключаете его к каждому нажатию клавиши.

Вам необходимо подключить автозаполнение один раз при запуске к любому соответствующему элементу.

например. поместите это вне ключа обработчика:

$('.item-inventory #item_num').autocomplete({ 
     delay : 100, 
     source: function(request, response){ 
      $.ajax({ 
       url: '../assets/server/orders/item_search.php', 
       dataType: 'JSON', 
       data: {search: request.term}, 
       success: function (data){ 
        var keys = data.search; 
       // $('#item-name').val(data.search[0].item); 
       // itemPrice = data.search[0].price; 
       // itemDesc = data.search[0].desc; 
        response($.map(keys, function(i){ 
         return{ 
          label : i.id 
         }; 

        })); 

       } 
      }); 
     }, 
     minLength : 1 
    }); 
+0

можете ли вы добавить пример кода, пожалуйста? –

+0

Это именно то, что я сделал, я прочитал, что сделал ваш первый комментарий, и поставил два и два вместе, дайте ему пять минут, и я соглашусь –

+0

Еще раз спасибо за вашу помощь, еще раз я узнал что-то новое! :) –

0

вы можете добавить еще событие KeyDown как здесь:

$('.item-inventory').on('keyup keydown', '#item_num', function(){ 
........ 
}); 
0

Если не работает должным образом, то при нагрузке Page вызовите функцию автозаполнения с пустым массивом строк , . $ ("input"). each (function() {$ (this) .autocomplete ({src: []});}); Теперь это будет работать и при первом нажатии. Удачи.

Смежные вопросы