如果文本不为空,为什么自动完成小部件不起作用?

时间:2011-10-25 07:34:55

标签: javascript jquery

如果文本为空,下面的代码只能显示数组,那么该怎么可能...它应该在输入时显示列表NOT当文本为空时。

步骤进行:

  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 );
                };            
    
          }                                             
        }
      });        
    });
    

2 个答案:

答案 0 :(得分:2)

您不想使用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

答案 1 :(得分:1)

您可以使用#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;
         }
 })
 ...

看看here