Почему виджет автозаполнения не работает, если текст НЕ является пустым?

#javascript #jquery

#javascript #jquery ( jquery )

Вопрос:

Как возможно, чтобы приведенный ниже код отображал массив ТОЛЬКО в том случае, если текст пуст… Он должен показывать список во время ввода, А НЕ тогда, когда текст пуст.

ШАГИ:

  1. Сосредоточьтесь на тексте
  2. введите текст, например ‘abc’ (этот текст возвращает массив, выполняющий вызов ajax).
  3. ничего не случилось
  4. удалите ‘abc’, и я правильно увижу массив.
     $('#titolare').keyup(function(){
      var titolare = $.trim($('#titolare').val());
    
      $.ajax({
        type: "POST",
        url: "page.php",
        data: { titolare: titolare },
        success: function(msg){          
          var obj = jQuery.parseJSON(msg);
    
          if (obj.result){
            var tit   = obj.titolare
              , tit_a = [];            
    
            $.each (tit, function (a) {              
              tit_a[a] = { titolare: tit[a].titolare, cod_fis: tit[a].cod_fis };
            });         
    
                $("#titolare").autocomplete({
              minLength: 0,         
              source: tit_a,
                    focus: function( event, ui ) {             
                        $("#titolare").val(ui.item.titolare);
                        return false;
                    },
                    select: function( event, ui ) {            
                        $("#titolare").val(ui.item.titolare);
                        return false;
                    }
                })
                .data( "autocomplete" )._renderItem = function(ul, item) {          
                    return $( "<li></li>" )
                        .data( "item.autocomplete", item )
                        .append( "<a>"   item.titolare   "<br />("  item.cod_fis  ")</a>")
                        .appendTo( ul );
                };            
    
          }                                             
        }
      });        
    });
     

Ответ №1:

Вы не хотите использовать keyUp функцию. Вы можете указать URL-адрес в качестве источника следующим образом,

 $(document).ready(function(){
    $( "#titolare" ).autocomplete({
             source: "page.php",                }
             focus: function( event, ui ) {             
                        $("#titolare").val(ui.item.titolare);
                        return false;
                    },
                    select: function( event, ui ) {            
                        $("#titolare").val(ui.item.titolare);
                        return false;
                    }
    }).data( "autocomplete" )._renderItem = function(ul, item) {          
                    return $( "<li></li>" )
                        .data( "item.autocomplete", item )
                        .append( "<a>"   item.titolare   "<br />("  item.cod_fis  ")</a>")
                        .appendTo( ul );
                };  
});
 

И в вашем page.php вы можете вернуть JSON соответствующий список объектов.
http://jqueryui.com/demos/autocomplete/#remote

Ответ №2:

Вы можете использовать виджет автозаполнения в #titolare (без использования keyup прослушивателя), установив source атрибут для функции, которая будет выполнять как вызов ajax, так и преобразование данных, которые вам нужны (и теперь вы пытаетесь сделать это с помощью keyup метода).

Что-то вроде:

 $("#titolare").autocomplete({
      minLength: 0,         
      source: function(request, response){
          // ajax call and any data transformation here...
      },
      focus: function( event, ui ) {             
         $("#titolare").val(ui.item.titolare);
         return false;
      },
      select: function( event, ui ) {            
         $("#titolare").val(ui.item.titolare);
         return false;
         }
 })
 ...
 

Посмотрите здесь.