打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
JqueryUI学习笔记
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>Insert title here</title>  
  6. <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/start/jquery-ui.css">  
  7. <style type="text/css">  
  8. .ui-autocomplete-category {  
  9.     font-weight: bold;  
  10.     padding: .2em .4em;  
  11.     margin: .8em 0 .2em;  
  12.     line-height: 1.5;  
  13. }  
  14. </style>  
  15. <script src="//code.jquery.com/jquery-1.9.1.js"></script>  
  16. <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>  
  17. <script type="text/javascript">  
  18.     //扩展autocomplete组件,重写autocomplete的_renderMenu方法,将提示条目分类别显示  
  19.     //$.widget接受三个参数,第一个参数是新的组件的名称,必须以custom.开头,.后面的才是新组件的名称,调用或者初始化方式与autocomplete相同  
  20.     //第二个参数是扩展或者重写的组件,这里是$.ui.autocomplete,自动完成组件  
  21.     //第三个参数是对象,包含了重写的属性或者方法,这里重写了_renderMenu方法  
  22.     $.widget("custom.catcomplete", $.ui.autocomplete, {  
  23.         //该方法在渲染下拉列表之前被调用,可以通过修改此方法达到将选项分类的目的  
  24.         //传入的ul参数是选项的父容器,可以将选项增加到容器中  
  25.         //传入的items参数是即将显示的数据列表  
  26.         _renderMenu : function(ul, items) {  
  27.             var that = this;  
  28.             currentCategory = "";  
  29.             //遍历items对象数组,将他们分类,下面的这种方法必须保证同类别的数据放在一起才可以。  
  30.             $.each(items, function(index, item) {  
  31.                 if (item.category != currentCategory) {  
  32.                     ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");  
  33.                     currentCategory = item.category;  
  34.                 }  
  35.                 that._renderItemData(ul, item);  
  36.             });  
  37.         }  
  38.     });  
  39.     //扩展combobox组件,使其可以支持自动完成功能,重要!!!  
  40.     $.widget("custom.combobox", {  
  41.         //本人猜测这个方法应该是创建该组件时调用的,实践证明也是的,即$("#combobox").combobox();这句话  
  42.         _create : function() {  
  43.             console.log("call _create");  
  44.             this.wrapper = "";  
  45.         }  
  46.     });  
  47. </script>  
  48. <script type="text/javascript">  
  49.     $(function() {  
  50.         var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL",  
  51.                 "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP",  
  52.                 "Python", "Ruby", "Scala", "Scheme" ];  
  53.         var objects = [ {  
  54.             label : "America",  
  55.             value : "美国"  
  56.         }, {  
  57.             label : "China",  
  58.             value : "中国"  
  59.         }, {  
  60.             label : "Japan",  
  61.             value : "日本"  
  62.         } ];  
  63.         var categories = [ {  
  64.             label : "anders",  
  65.             category : ""  
  66.         }, {  
  67.             label : "andreas",  
  68.             category : ""  
  69.         }, {  
  70.             label : "antal",  
  71.             category : ""  
  72.         }, {  
  73.             label : "annhhx10",  
  74.             category : "Products"  
  75.         }, {  
  76.             label : "annk K12",  
  77.             category : "Products"  
  78.         }, {  
  79.             label : "annttop C13",  
  80.             category : "Products"  
  81.         }, {  
  82.             label : "anders andersson",  
  83.             category : "People"  
  84.         }, {  
  85.             label : "andreas andersson",  
  86.             category : "People"  
  87.         }, {  
  88.             label : "andreas johnson",  
  89.             category : "People"  
  90.         } ];  
  91.         var autocomplete = $("#tags").autocomplete({  
  92.             //设置自动完成输入框的数据源,可以是字符串数组,可以使对象数组,也可以是url字符串(返回一个json数据)  
  93.             //如果是对象数组,每个对象可以有两个属性,label和value,label代表显示的值,value代表选中后填入输入框的值,数据过滤是过滤label的  
  94.             //source : availableTags,//为什么设置成url后就不能根据用户输入过滤数据了呢,而且文件中是对象数组无法自动提示啊  
  95.             //自动提示框会根据用户输入的字符自动筛选符合条件的字符串,默认筛选规则是整个字符串内容包含用户输入的字符即符合条件,可以修改这个默认行为  
  96.             //source如果设置成function函数,函数有两个参数,第一个参数可以获取用户输入的字符,第二个参数是一个函数,调用这个函数并且传入一个数组即可,数组即前面所说的数组,但是不能是url了,因为调用response函数已经不会帮我们再次去请求了  
  97.             source : function(request, response) {  
  98.                 console.log($.ui.autocomplete.escapeRegex(request.term));  
  99.                 //创建一个正则表达式,$.ui.autocomplete.escapeRegex方法说是可以将字符串中的特殊字符作为普通字符处理,即如果传入的是"[]",处理后返回"\[\]",其实就是加了转义字符而已  
  100.                 //第二个参数"i"表示该正则表达式忽略大小写比较  
  101.                 var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");  
  102.                 //$.grep方法可以看做是一个过滤数组元素的方法,将数组中不符合条件的元素剔除  
  103.                 //第一个参数是源数组,第二个参数是一个回调函数,参数是数组的每一项,如果方法返回true,该元素会被加到目的数组中,否则被过滤  
  104.                 response($.grep(availableTags, function(item) {  
  105.                     return matcher.test(item);  
  106.                 }));  
  107.             },  
  108.             //这个配置项不知道是干嘛的。。。  
  109.             appendTo : "body",  
  110.             //可以设置成true或者false  
  111.             //如果设置成true,当下拉列表显示时,自动聚焦到列表第一项  
  112.             //如果设置成false,当下拉列表显示时,将不会自动聚焦,默认为false  
  113.             autoFocus : true,  
  114.             //设置下拉列表显示的延迟时间,单位毫秒,默认值是300  
  115.             delay : 100,  
  116.             //设置自动完成框的禁用状态,true表示禁用,false表示启用  
  117.             disabled : false,  
  118.             //设置搜索的最小字符数,即输入至少minLength个字符,才会去匹配提示,  
  119.             //数据比较少的情况下可以设置成0,但是如果数据太多,有几千条,就需要用这个限制来过滤数据了  
  120.             minLength : 1,  
  121.             //设置下拉列表相对于自动完成输入框的位置  
  122.             position : {  
  123.                 //设定下拉列表的定位点,即at属性会以这个点为参照物,设定下拉列表相对于输入框的位置  
  124.                 //第一个值是水平方向,可选left,right,center  
  125.                 //第二个值是竖直方向,可选left,right,center  
  126.                 my : "left top",  
  127.                 //设定相对位置  
  128.                 at : "left bottom"  
  129.             },  
  130.             //扩展点,不知道干嘛的,没看见被调用,应该不是这么使用  
  131.             _renderItem : function(ul, item) {  
  132.                 alert("_renderItem");  
  133.                 return $("<li>").attr("data-value", item.value).append($("<a>").text(item.label)).appendTo(ul);  
  134.             },  
  135.             //扩展点,不知道干嘛的,没看见被调用,应该不是这么使用  
  136.             _renderMenu : function(ul, items) {  
  137.                 var that = this;  
  138.                 $.each(items, function(index, item) {  
  139.                     that._renderItemData(ul, item);  
  140.                 });  
  141.                 $(ul).find("li:odd").addClass("odd");  
  142.             },  
  143.             //扩展点,不知道干嘛的,没看见被调用,应该不是这么使用  
  144.             _resizeMenu : function() {  
  145.                 this.menu.element.outerWidth(500);  
  146.             },  
  147.             //当文本框内容修改后失去焦点时触发该事件,也可以使用绑定的方式将该事件绑定到提示框上  
  148.             //autocomplete.on("autocompletechange",function(event,ui){});     
  149.             //ui.item代表你选中的那一项的对象,包含label和value属性,如果没选中ui.item为null  
  150.             change : function(event, ui) {  
  151.                 if (ui.item == null) {  
  152.                     console.log("No Choose");  
  153.                 } else {  
  154.                     console.log("Choose" + ui.item.value);  
  155.                 }  
  156.             },  
  157.             //当智能提示框关闭后会触发此事件,ui是空对象  
  158.             close : function(event, ui) {  
  159.                 console.log("close");  
  160.             },  
  161.             //当自动完成组件创建时回调此方法,ui是空对象  
  162.             create : function(event, ui) {  
  163.                 console.log("create");  
  164.             },  
  165.             //当提示列表中的某一项获取焦点时触发此事件,其中ui.item就是获得焦点的那一项  
  166.             //只有使用键盘选择某一项时,才会更新文本框中的值,使用鼠标不更新文本框的值,但是都会触发此事件  
  167.             focus : function(event, ui) {  
  168.                 console.log("focus:" + ui.item.value);  
  169.             },  
  170.             //当提示列表打开后触发此事件,ui是空的对象  
  171.             open : function(event, ui) {  
  172.                 console.log("open");  
  173.             },  
  174.             //在search事件触发之后,列表显示之前会触发此事件,其中ui.content是即将显示在列表中的内容,已经标准化过了,是包含label和value的对象数组  
  175.             response : function(event, ui) {  
  176.                 console.log("content length:" + ui.content.length);  
  177.                 //在每个对象的label属性中增加一个索引,使用$.each()方法遍历对象数组,第一个参数是数组,第二个参数是回调方法,每遍历一个对象会回调一次该方法,该方法第一个参数是索引,第二个参数是对象,如果该方法返回false,表示跳出遍历,如果返回true,继续下一个对象遍历。  
  178.                 $.each(ui.content, function(i, obj) {  
  179.                     obj.label += i;  
  180.                     if (i == 5) {  
  181.                         return false;  
  182.                     }  
  183.                 });  
  184.             },  
  185.             //在minLength满足后,delay之后会首先触发该事件,具体作用不详,传进来的ui是一个空的对象  
  186.             search : function(event, ui) {  
  187.                 console.log("search");  
  188.             },  
  189.             //当列表中的某一个像被选中后触发此事件,参数和focus是一样的  
  190.             select : function(event, ui) {  
  191.                 console.log("select:" + ui.item.value);  
  192.                 //event.preventDefault();使用这个函数可以阻止事件的默认行为,比如选择某一项的默认行为就是更新文本框的值,如果调用该方法,则不会更新文本框的值。但是不能阻止列表关闭。  
  193.             }  
  194.         });  
  195.         $("#close").button().click(function() {  
  196.             autocomplete.autocomplete("close");//关闭智能提示框  
  197.         });  
  198.         $("#destroy").button().click(function() {  
  199.             autocomplete.autocomplete("destroy");//销毁智能提示框,输入框将不再具有提示功能  
  200.         });  
  201.         $("#disable").button().click(function() {  
  202.             autocomplete.autocomplete("disable");//禁用智能提示框,输入框将不再具有提示功能  
  203.         });  
  204.         $("#enable").button().click(function() {  
  205.             autocomplete.autocomplete("enable");//启用智能提示框,输入框将不再具有提示功能  
  206.         });  
  207.         $("#isDisabled").button().click(function() {  
  208.             var isDisabled = autocomplete.autocomplete("option", "disabled");//获取智能提示是否禁用的状态  
  209.             console.log("isDisabled:" + isDisabled);  
  210.         });  
  211.         $("#option").button().click(function() {  
  212.             var option = autocomplete.autocomplete("option");//获取智能提示框所有配置信息  
  213.             var optionStr = "";  
  214.             //遍历配置信息  
  215.             for ( var p in option) {  
  216.                 optionStr += p + ":" + option[p] + "\n";  
  217.             }  
  218.             console.log("Option:\n" + optionStr);  
  219.         });  
  220.         $("#setDelay").button().click(function() {  
  221.             autocomplete.autocomplete("option", "delay", 2000);//设置下拉列表延迟时间为2s  
  222.         });  
  223.         $("#search").button().click(function() {  
  224.             //调用之后会触发search事件,可以设置回调方法,实践证明,不能触发search事件的回调方法,funk,那这个方法作用是啥啊?  
  225.             autocomplete.autocomplete("search", "");  
  226.         });  
  227.         //创建catcomplete组件  
  228.         $("#catcomplete").catcomplete({  
  229.             source : categories  
  230.         });  
  231.         //创建combobox组件  
  232.         var combobox = $("#combobox").combobox();  
  233.         //遍历一下combobox对象的属性和方法  
  234.         var optionStr = "";  
  235.         for ( var p in combobox) {  
  236.             optionStr += p + "\n";  
  237.         }  
  238.         console.log(optionStr);  
  239.     });  
  240. </script>  
  241. </head>  
  242. <body>  
  243.     <div class="ui-widget">  
  244.         <label for="tags">autocomplete: </label> <input id="tags" />  
  245.     </div>  
  246.     <!--   
  247.     <button id="close">关闭智能提示框</button>  
  248.     <button id="destroy">销毁智能提示框</button>  
  249.     <button id="disable">禁用智能提示</button>  
  250.     <button id="enable">启用智能提示</button>  
  251.     <button id="isDisabled">获取智能提示是否禁用状态</button>  
  252.     <button id="option">获取智能提示框所有配置信息</button>  
  253.     <button id="setDelay">设置列表延迟时间</button>  
  254.     <button id="search">触发search事件</button>  
  255.      -->  
  256.     <div class="ui-widget">  
  257.         <label for="catcomplete">catcomplete: </label><input id="catcomplete" />  
  258.     </div>  
  259.     <div class="ui-widget">  
  260.         <label>Your preferred programming language: </label> <select id="combobox">  
  261.             <option value="">Select one...</option>  
  262.             <option value="ActionScript">ActionScript</option>  
  263.             <option value="AppleScript">AppleScript</option>  
  264.             <option value="Asp">Asp</option>  
  265.             <option value="BASIC">BASIC</option>  
  266.             <option value="C">C</option>  
  267.             <option value="C++">C++</option>  
  268.             <option value="Clojure">Clojure</option>  
  269.             <option value="COBOL">COBOL</option>  
  270.             <option value="ColdFusion">ColdFusion</option>  
  271.             <option value="Erlang">Erlang</option>  
  272.             <option value="Fortran">Fortran</option>  
  273.             <option value="Groovy">Groovy</option>  
  274.             <option value="Haskell">Haskell</option>  
  275.             <option value="Java">Java</option>  
  276.             <option value="JavaScript">JavaScript</option>  
  277.             <option value="Lisp">Lisp</option>  
  278.             <option value="Perl">Perl</option>  
  279.             <option value="PHP">PHP</option>  
  280.             <option value="Python">Python</option>  
  281.             <option value="Ruby">Ruby</option>  
  282.             <option value="Scala">Scala</option>  
  283.             <option value="Scheme">Scheme</option>  
  284.         </select>  
  285.     </div>  
  286.     <button id="toggle">Show underlying select</button>  
  287. </body>  
  288. </html>  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
jQuery插件开发
WPS JS宏入门案例集锦
JavaScript--总结三(数组和函数)
精通Javascript: 函数式array.forEach的8个案例
带输入提示的搜索框ajax请求
jQuery UI Autocomplete 类似百度、谷歌输入框的自动填充文本域 .
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服