2009-12-24 156 views
0

我正在使用jquery自动完成来填充用户列表。 在document.ready,我打电话给自动完成JSON获取用户列表。jquery自动完成问题

当我在自动完成json调用完成之前在文本框中输入有效的用户名(或任何内容)时,它不会显示自动完成选项(自动完成功能对于有效字符也不起作用)。

,当我点击文本框外,并再次尝试,它的工作..

什么可能是自动完成的问题,当我尝试自动完成JSON调用完成之前键入?

为自动完成的代码是:

$.getJSON("/User/GetAllUsers/?t=" + new Date(), {}, 
     function(data) { 
      if (data != null) { 
       $("#UserName").autocomplete(data, { mustMatch: false, matchContains: 4, max: 50, 
        formatItem: function(row) { 
         return row.FirstName + " " + row.LastName + " [" + row.LoginName + "]"; 
        }, 
        formatResult: function(row) { 
         return row.FirstName + " " + row.LastName + " [" + row.LoginName + "]"; 
        } 
       }); 
      } 
     }); 
+0

你可以发布一些代码,也许coument.ready你绑定自动完成? – Pharabus 2009-12-24 16:14:20

回答

0

如果您在文本框中键入,然后JSON通话结束,以及设置自动完成以后。

编辑:忘了我说: 你可以使用search方法手动触发搜索

尝试触发文本框上的更改事件吗? http://docs.jquery.com/Events/trigger

+0

触发器也不起作用。它没有显示值,除非我专注于其他控件并返回到用户名控制。 – Prasad 2009-12-24 16:58:01

+0

你可以做一个blur()和一个focus()吗? – 2009-12-24 18:42:49

0

设置自动完成部分的回调方法只在getJSON调用完成后执行。

您可以执行以下两项操作之一: 1.构建阻止UI /文本框的阻止机制,直到json调用完成。实质上,自动完成合作完成后。 2.使用自动完成插件直接查询GetAllUsers方法:

$("#UserName").autocomplete("/User/GetAllUsers/?t=" + new Date(), { mustMatch: false, matchContains: 4, max: 50, 
       formatItem: function(row) { 
        return row.FirstName + " " + row.LastName + " [" + row.LoginName + "]"; 
       }, 
       formatResult: function(row) { 
        return row.FirstName + " " + row.LastName + " [" + row.LoginName + "]"; 
       } 
      }); 

那么你将不得不过滤用户在使用queryParameter(Q),这将包含所需的搜索项的服务器端。