使用jQuery-ui自动完成显示微调器

Cie*_*iel 21 css jquery-ui jquery-ui-autocomplete

我一直在那里搜索,只是没有看到有人这样做 - 是否有可能有一些带有jQuery UI自动完成的微调器/加载器?(1.8)在获取数据的同时?

ste*_*ann 45

我的解决方案是使用.ui-autocomplete-loading CSS类,当ajax GET请求正在进行时,该类在输入元素上添加和删除:

input[type='text'].ui-autocomplete-loading {
    background: url('/icons/loading.gif') no-repeat right center;
}
Run Code Online (Sandbox Code Playgroud)

当然,它不是一个非常灵活的解决方案,因为你无法在输入元素之外显示微调器,但在我的情况下,它正是我正在寻找的UX.

  • 我试过这个,它几乎可以工作.它将整个背景更改为微调器,当背景为不同颜色时(例如:蓝色背景上的白色文本框),这不是很好.我使用了以下内容:.ui-autocomplete-loading {background-image:url('/ Content/Images/ui-anim_basic_16x16.gif'); background-repeat:no-repeat; background-position:right center; } (2认同)

woo*_*nja 39

您应该能够使用自动完成功能将微调器图像放在字段旁边,并将其隐藏起来.然后使用回调函数隐藏/显示它.

然后使用搜索选项显示微调器并打开以隐藏它:

v1.8及以下

$( ".selector" ).autocomplete({
   search: function(event, ui) { 
       $('.spinner').show();
   },
   open: function(event, ui) {
       $('.spinner').hide();
   }
});
Run Code Online (Sandbox Code Playgroud)

v1.9及以上

$( ".selector" ).autocomplete({
   search: function(event, ui) { 
       $('.spinner').show();
   },
   response: function(event, ui) {
       $('.spinner').hide();
   }
});
Run Code Online (Sandbox Code Playgroud)

  • 并作为旁注 - 纺纱厂的好地方= http://www.ajaxload.info/ (5认同)
  • 此解决方案的问题是如果响应包含零结果,则不会隐藏微调器,因为在这种情况下不会生成open事件.无论结果如何计数,控件都应该有一个"搜索完成"事件.规划维基http://wiki.jqueryui.com/w/page/12137709/Autocomplete参考了这样一个名为"响应"的事件,但似乎还没有实现. (4认同)
  • 事件"开放" - 不是一个好主意.使用"响应"的最佳方法,因为如果自动完成没有返回任何数据,那么"打开"没有调用,但"响应"调用. (3认同)

Sal*_*n A 5

CSS 解决方案

如果加载元素是输入控件的同级元素,则可以使用 CSS 通用同级组合符 (~):

.loading {
    /* whatever */
}
#autocomplete.ui-autocomplete-loading ~ .loading {
    background-image: url(loading.gif);
}
Run Code Online (Sandbox Code Playgroud)

工作示例
替代 (jQuery) 解决方案