jQuery UI自动完成IE问题

时间:2012-06-01 12:12:12

标签: jquery json jquery-ui jquery-ui-autocomplete

首先是我的代码

   $(function() {
        var suggest;
        $("#guestname").keyup(function() {

            $.ajax({
                async: true,
                url: '../include/searchGuest.php',
                dataType: 'json', 
                data: 'searchTxt=' + $(this).val() + '&festival_id=<?php echo $festival_id;?>', 
                success: function(data) {
                    suggest = data;
                    get_autocomplete(suggest);
                }   
            });
        });
    });


    function get_autocomplete(suggest) {
      $("#guestname").autocomplete({
        minLength: 3,
        source: suggest
      });
    }

我使用这个jQuery函数来获取guest虚拟机列表。用户填写一个名称为&#39; John&#39;的输入字段。 Ajax正在数据库中搜索包含&#39; John&#39;的姓氏或姓氏的访客。在同一个脚本(PHP)中,我创建了一个JSON对象,看起来像[&#34; 1234:John Doe&#34;,&#34; ...&#34;,&#34; ...&#34 ;](这个数字是这个客人的ID,猜测不重要,只想提一下)。 然后我将JSON传递给jQuery UI的自动完成功能。

在FF和Chrome中一切正常,在以JSON形式获得结果后,在输入域下面会打开一个小窗口并显示所有匹配项。 在IE9中它不像它根本不起作用,但我从来没有得到完整的JSON对象作为结果。此外,大多数情况下,我必须写几乎整个名字才能获得一场比赛 - &#39; Sulliv&#39;得到像沙利文那样的姓氏。在FF中足以写出“苏尔”。

在Guest数据库中有8.1k条目。 IE无法处理大型JSON或我必须改进我的脚本。这是IE和JSON或jQuery的常见问题吗?

1 个答案:

答案 0 :(得分:0)

您应该只初始化自动完成小部件,然后您可以使用source选项在服务器上执行过滤:

$("#guestname").autocomplete({
    minLength: 3,
    source: function (request, response) {
        $.ajax({
            async: true,
            url: '../include/searchGuest.php',
            dataType: 'json', 
            data: 'searchTxt=' + request.term + '&festival_id=<?php echo $festival_id;?>', 
            success: function(data) {
                response(data)
            }   
        });        
    }
});
  • request.term是用户搜索的字词。
  • response是您必须使用自动填充候选人调用的回调函数。