《jQuery、jQuery UI及jQuery Mobile技巧与示例》——7.2 技巧:使用自动补全微件提示输入值

7.2 技巧:使用自动补全微件提示输入值

在一些网站上,你可以找到用于选择的下拉菜单,它们包含了极长的选项列表。在许多情况下,可以使用具有自动补全功能的输入框取代下拉式菜单来帮助用户。省去了滚动选择,用户只要输入目标选项的第一个字符,然后自动补全组件便可以完成剩下的事。

代码清单7-2提供了一个自动补全的例子,它使用一段称为“Lorem Ipsum”的文字来实现输入第一个字后的补全。这段文字起源于两千年前,但仍然使用在图形设计和排版行业(通常被称为“假文”或“填充”的文字),用来查看设计的效果。

代码清单7-2 提示Lorem Ipsum值

00 <!DOCTYPE html>
01
02 <html lang="en">
03 <head>
04  <title>jQuery UI Draggable</title>
05  <link type="text/css" rel="stylesheet" href=
06   "http://code.jquery.com/ui/1.8.16/themes/base/jquery-ui.css"> 
07  <style>
08   .ui-widget {
09      font-size: 12px;
10   }
11  </style>
12 </head>
13 <body>
14
15 <div id="my-container">
16  <label for="my-autocomplete">Type to see how this works</label>
17  <input type="text" id="my-autocomplete">
18 </div>
19
20 <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
21 <script src="http://code.jquery.com/ui/1.8.16/jquery-ui.min.js">
22 </script>
23
24 <script>
25 // 请将下列代码移至一个外部的.js文件中
26 $(document).ready(function() {
27 
28  var loremIpsum = [
29  'Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur',
30   'adipiscing', 'elit', 'Donec', 'fermentum', 'tortor', 'et',
31   'ante', 'ullamcorper', 'eget', 'posuere', 'ligula' 
32  ];
33
34  $('#my-autocomplete').autocomplete({source: loremIpsum});
35 
36 });
37 </script>
38 </body>
39 </html>

当运行这个例子时,要注意自动补全框中的提示是根据它们在第29~31行的出现顺序排序的。autocomplete()函数在第34行被调用,它使用了source的选项,其值loremIpsum为第28行创建的数组。如果需要一个不同的排列顺序,按字母顺序或按热门程度,需要在“喂”给自动补全框数据前,自己先排好序。

7.2.1 为自动补全元素添加样式
在调用autocomplete命令后,输入框的HTML会变为这样:

<input type="text" id="my-autocomplete" class="ui-autocomplete-input"
 autocomplete="off" role="textbox" aria-autocomplete="list"
 aria-haspopup="true">
当开始在自动补全框中输入时,一组临时的HTML元素被添加到文档底部以生成选项列表。

<ul
 class="ui-autocomplete ui-menu ui-widget ui-widget-content
   ui-corner-all"
 role="listbox" aria-activedescendant="ui-active-menuitem"
 style="z-index: 1; width: 149px; top: 32px; left: 181px;
 display: none;">
 <li class="ui-menu-item" role="menuitem">
  <a class="ui-corner-all" tabindex="-1">Lorem</a>
 </li>
 <li class="ui-menu-item" role="menuitem">
  <a class="ui-corner-all" tabindex="-1">dolor</a>
 </li>
 . . . 等等 . . .
</ul>

可以使用这些HTML代码片段中的类名去手动修改自动补全组件的样式。

7.2.2 设置自动补全的选项
表7-3列出的选项可以设置自动补全微件。

7.2.3 捕获自动补全的事件
当使用自动补全时,有很多阶段可以发生事件处理。下面的代码片段举例演示了哪个阶段可以绑定它。

一个新的自动补全组件被初始化时:

$('#my-autocomplete').autocomplete({create: function(event, ui) {
   // 事件处理
}});
//或
$('#my-autocomplete')
  .on('autocompletecreate', function(event, ui) {
   // 事件处理
  })
  .autocomplete();

用户输入的搜索值达到minLength设置的长度时。返回false将取消搜索:

$('#my-autocomplete').autocomplete({search: function(event, ui) {
   // 事件处理
}});
//或
$('#my-autocomplete').autocomplete()
 .on('autocompletesearch', function(event, ui) {
   // 事件处理
 });

选项菜单打开时:

$('#my-autocomplete').autocomplete({open: function(event, ui) {
   // 事件处理
}});
//或
$('#my-autocomplete').autocomplete()
 .on('autocompleteopen', function(event, ui) {
   // 事件处理
 });

下拉菜单中的一个元素获得焦点时。返回false将阻止输入框的更新:

$('#my-autocomplete').autocomplete({focus: function(event, ui) {
   // 事件处理
}});
//或
$('#my-autocomplete').autocomplete()
 .on('autocompletefocus', function(event, ui) {
   // 事件处理
 });

一个选项被选择时:

$('#my-autocomplete').autocomplete({select: function(event,
ui) {
   // 事件处理
}});
//或
$('#my-autocomplete').autocomplete()
 .on('autocompleteselect', function(event, ui) {
   // 事件处理
 });

自动补全关闭时:

$('#my-autocomplete').autocomplete({close: function(event, ui) {
   // 事件处理
}});
//或
$('#my-autocomplete').autocomplete()
 .on('autocompleteclose', function(event, ui) {
   // 事件处理
 });

当用户移动到屏幕上的下一个元素,如果输入框的值也发生了变化,该事件被触发:

$('#my-autocomplete').autocomplete({change: function(event, ui) {
   // 事件处理
}});
//或
$('#my-autocomplete').autocomplete()
 .on('autocompletechange', function(event, ui) {
   // 事件处理
 });

7.2.4 调用自动补全的方法
下面的代码片段演示了使用自动补全的方法的例子。

绑定click事件,设置选项minLength:0,点击输入框后,不输入任何值而使用当前值则会显示所有搜索的结果1:

$('#my-autocomplete')
 .autocomplete({minLength: 0, source: loremIpsum})
 .click(function() {
   $(this).autocomplete('search');
 });

关闭当前提示列表:

$('#my-autocomplete').autocomplete('close');

时间: 2024-08-03 04:17:27

《jQuery、jQuery UI及jQuery Mobile技巧与示例》——7.2 技巧:使用自动补全微件提示输入值的相关文章

jquery 实现输入邮箱时自动补全下拉提示功能_javascript技巧

记得去年做某个项目的时候,用到了邮箱输入自动提示功能,于是网上搜了一下,发现了这个写得不错,现在回想起来,转载一下,方便查阅. 邮箱的广泛使用得益于它的免费,因此很多网站在注册的时候都会直接使用邮箱作为账号名 为了提高用户的体验,很多网站都会实现邮箱输入的自动提示功能. 实现效果如图所示: 核心代码(需要jquery的支持): (function($){ $.fn.mailAutoComplete = function(options){ var defaults = { boxClass: "

Excel技巧:快速录数据 让单位自动补全

第一步:运行Excel,单击选中需要设置格式的列.右键单击选中的列,在弹出的快捷菜单中选择"设置单元格格式"(如图1). 第二步:在打开的"单元格格式"对话框中,在"数字"标签中,选中"自定义"项,在右侧"类型(T):"下方的文本框中输入"0.00"CM""(如图2,不含外侧引号),最后单击"确定"按钮. 经过这样设置之后,在该列单元格中输入数据时

BootStrap Typeahead自动补全插件实例代码_javascript技巧

关键代码如下所示: $('#Sale').typeahead({ ajax: { url: '@Url.Action("../Contract/GetSale")', //timeout: 300, method: 'post', triggerLength: 1, loadingClass: null, preProcess: function (result) { return result; } }, display: "Value", val: "

详解jQuery UI库中文本输入自动补全功能的用法_jquery

自动补全(autocomplete),是一个可以减少用户输入完整信息的UI 工具.一般在 输入邮箱.搜索关键字等,然后提取出相应完整字符串供用户选择. 一.调用autocomplete()方法 $('#email').autocomplete({ source : ['aaa@163.com', 'bbb@163.com', 'ccc@163.com'], }); 二.修改autocomplete()样式   由于autocomplete()方法是弹窗,然后鼠标悬停的样式.通过Firebug 想

PHP+jQuery实现自动补全功能源码_php技巧

前面手工写了一个下拉自动补全功能,写的简单,只实现了鼠标选择的功能,不支持键盘选择.由于项目很多地方要用到这个功能,所以需要用心做一下.发现select2这个插件的功能可以满足当前需求. 在使用jquery插件select2的过程中遇到了一些疑惑,无论是穿json数据还是通过jsonp方式取数据,都能够正确返回.可是下拉列表中的条目却不能被选中,对鼠标和键盘选择都无效. 后来发现,select2插件在实现选中时是以数据中的id字段为准的.所以不管是json还是jsonp,ajax返回的数据都必须

基于jquery实现的自动补全功能

 这篇文章主要介绍了基于jquery实现的自动补全功能的方法,涉及jQuery操作数据实现补全的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了基于jquery实现的自动补全功能的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: $(function() { // 自动补全 var maxcount = 0;// 表示他最大的值 var thisCount =0;// 初始化他框的位置 $("body").prepend("<div

jquery实现文本框的文本自动补全效果

 这篇文章主要介绍了jquery实现文本框的文本自动补全效果,大家参考使用吧   代码如下: /*文本自动补全 zhouxiang*/   (function ($) {     $.Completion = function (setting) {         var opts = $.extend({}, $.Completion.DefaultSetting, setting);         //宽度         var Completion_Width = null;    

jquery实现邮箱自动补全功能

 这篇文章主要介绍了jquery实现邮箱自动补全功能,大家参考使用吧  代码如下: (function($){     $.fn.autoMail = function(options){          var autoMail = $(this);          var _value   = '';          var _index   = -1;          var _width   = autoMail.outerWidth();          var _heigh

基于jquery的自动补全

写个简单的自动补全,供学习的朋友参考,希望对大家所有帮助 需要先引入jquery,注意自己的引入路径 <script type="text/javascript" src="js/jquery.min.js"></script> <input id="chooseCity" type="text" placeholder="输入城市查询"> 页面初始化时调用下下面方法即可