文本框上的下拉列表(自动完成)在没有结果时消失

时间:2015-12-17 12:03:20

标签: jquery ajax autocomplete

我的javascript代码自动完成调用ajax从test2.php获取结果(json)(查询数据) 它有效,如果有结果,如果结果为空自动完成应该消失但不会消失 我尝试得到一些错误或错误,在控制台的浏览器上显示F12" Uncaught TypeError:无法读取属性' length' of null"

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
<script type="text/javascript">
$('#name1').autocomplete({
        source: function( request, response ) {
            var name = $('#name1').val();
            $.ajax({
                url: 'test2.php',
                dataType: 'json',
                data: {
                    p : name
                },
                success: function(data) {
                    response($.map(data, function(item) {
                        return {
                            value : item.name
                        };
                    }));
                }
            });
        },
        minLength: 1,
        select: function(event, ui) {
            $(this).val(ui.item.value);
        }
    });
</script>

请帮助我新手jquery ajax

2 个答案:

答案 0 :(得分:1)

如果返回空结果,请查看这是否有帮助。 Null值上的任何肌动蛋白都会抛出错误。所以添加了“if(data){做某事......}”,这样你就可以在那里应用你的逻辑了。

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
<script type="text/javascript">
$('#name1').autocomplete({
    source: function( request, response ) {
        var name = $('#name1').val();
        $.ajax({
            url: 'test2.php',
            dataType: 'json',
            data: {
                p : name
            },
            success: function(data) {
                if(data){
                 response($.map(data, function(item) {
                    return {
                        value : item.name
                    };
                }));
            }else{alert("No result so do some thing")}
            }
        });
    },
    minLength: 1,
    select: function(event, ui) {
        var test = ui.item ? ui.item.id : 0;
         if (test > 0)
         {
          $(this).val(ui.item.value);
         }            
    }
});
</script>

答案 1 :(得分:0)

我使用.autocomplete(&#39; close&#39;)来解决我的问题。谢谢你的每一个答案和评论;)

success: function(data) {
                    if(jQuery.isEmptyObject(data)){
                        $('#name1').autocomplete( "close" );
                    }else {
                        response($.map(data, function(item) {
                            return {
                                value : item.name
                            };
                        }));
                    }
                }