jquery.ui.widget详解
案例详解
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/start/jquery-ui.css">
<style type="text/css">
.ui-autocomplete-category {
font-weight: bold;
padding: .2em .4em;
margin: .8em 0 .2em;
line-height: 1.5;
}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script type="text/javascript">
//扩展autocomplete组件,重写autocomplete的_renderMenu方法,将提示条目分类别显示
//$.widget接受三个参数,第一个参数是新的组件的名称,必须以custom.开头,.后面的才是新组件的名称,调用或者初始化方式与autocomplete相同
//第二个参数是扩展或者重写的组件,这里是$.ui.autocomplete,自动完成组件
//第三个参数是对象,包含了重写的属性或者方法,这里重写了_renderMenu方法
$.widget("custom.catcomplete", $.ui.autocomplete, {
//该方法在渲染下拉列表之前被调用,可以通过修改此方法达到将选项分类的目的
//传入的ul参数是选项的父容器,可以将选项增加到容器中
//传入的items参数是即将显示的数据列表
_renderMenu : function(ul, items) {
var that = this;
currentCategory = "";
//遍历items对象数组,将他们分类,下面的这种方法必须保证同类别的数据放在一起才可以。
$.each(items, function(index, item) {
if (item.category != currentCategory) {
ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
currentCategory = item.category;
}
that._renderItemData(ul, item);
});
}
});
//扩展combobox组件,使其可以支持自动完成功能,重要!!!
$.widget("custom.combobox", {
//本人猜测这个方法应该是创建该组件时调用的,实践证明也是的,即$("#combobox").combobox();这句话
_create : function() {
console.log("call _create");
this.wrapper = "";
}
});
</script>
<script type="text/javascript">
$(function() {
var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL",
"ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP",
"Python", "Ruby", "Scala", "Scheme" ];
var objects = [ {
label : "America",
value : "美国"
}, {
label : "China",
value : "中国"
}, {
label : "Japan",
value : "日本"
} ];
var categories = [ {
label : "anders",
category : ""
}, {
label : "andreas",
category : ""
}, {
label : "antal",
category : ""
}, {
label : "annhhx10",
category : "Products"
}, {
label : "annk K12",
category : "Products"
}, {
label : "annttop C13",
category : "Products"
}, {
label : "anders andersson",
category : "People"
}, {
label : "andreas andersson",
category : "People"
}, {
label : "andreas johnson",
category : "People"
} ];
var autocomplete = $("#tags").autocomplete({
//设置自动完成输入框的数据源,可以是字符串数组,可以使对象数组,也可以是url字符串(返回一个json数据)
//如果是对象数组,每个对象可以有两个属性,label和value,label代表显示的值,value代表选中后填入输入框的值,数据过滤是过滤label的
//source : availableTags,//为什么设置成url后就不能根据用户输入过滤数据了呢,而且文件中是对象数组无法自动提示啊
//自动提示框会根据用户输入的字符自动筛选符合条件的字符串,默认筛选规则是整个字符串内容包含用户输入的字符即符合条件,可以修改这个默认行为
//source如果设置成function函数,函数有两个参数,第一个参数可以获取用户输入的字符,第二个参数是一个函数,调用这个函数并且传入一个数组即可,数组即前面所说的数组,但是不能是url了,因为调用response函数已经不会帮我们再次去请求了
source : function(request, response) {
console.log($.ui.autocomplete.escapeRegex(request.term));
//创建一个正则表达式,$.ui.autocomplete.escapeRegex方法说是可以将字符串中的特殊字符作为普通字符处理,即如果传入的是"[]",处理后返回"\[\]",其实就是加了转义字符而已
//第二个参数"i"表示该正则表达式忽略大小写比较
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
//$.grep方法可以看做是一个过滤数组元素的方法,将数组中不符合条件的元素剔除
//第一个参数是源数组,第二个参数是一个回调函数,参数是数组的每一项,如果方法返回true,该元素会被加到目的数组中,否则被过滤
response($.grep(availableTags, function(item) {
return matcher.test(item);
}));
},
//这个配置项不知道是干嘛的。。。
appendTo : "body",
//可以设置成true或者false
//如果设置成true,当下拉列表显示时,自动聚焦到列表第一项
//如果设置成false,当下拉列表显示时,将不会自动聚焦,默认为false
autoFocus : true,
//设置下拉列表显示的延迟时间,单位毫秒,默认值是300
delay : 100,
//设置自动完成框的禁用状态,true表示禁用,false表示启用
disabled : false,
//设置搜索的最小字符数,即输入至少minLength个字符,才会去匹配提示,
//数据比较少的情况下可以设置成0,但是如果数据太多,有几千条,就需要用这个限制来过滤数据了
minLength : 1,
//设置下拉列表相对于自动完成输入框的位置
position : {
//设定下拉列表的定位点,即at属性会以这个点为参照物,设定下拉列表相对于输入框的位置
//第一个值是水平方向,可选left,right,center
//第二个值是竖直方向,可选left,right,center
my : "left top",
//设定相对位置
at : "left bottom"
},
//扩展点,不知道干嘛的,没看见被调用,应该不是这么使用
_renderItem : function(ul, item) {
alert("_renderItem");
return $("<li>").attr("data-value", item.value).append($("<a>").text(item.label)).appendTo(ul);
},
//扩展点,不知道干嘛的,没看见被调用,应该不是这么使用
_renderMenu : function(ul, items) {
var that = this;
$.each(items, function(index, item) {
that._renderItemData(ul, item);
});
$(ul).find("li:odd").addClass("odd");
},
//扩展点,不知道干嘛的,没看见被调用,应该不是这么使用
_resizeMenu : function() {
this.menu.element.outerWidth(500);
},
//当文本框内容修改后失去焦点时触发该事件,也可以使用绑定的方式将该事件绑定到提示框上
//autocomplete.on("autocompletechange",function(event,ui){});
//ui.item代表你选中的那一项的对象,包含label和value属性,如果没选中ui.item为null
change : function(event, ui) {
if (ui.item == null) {
console.log("No Choose");
} else {
console.log("Choose" + ui.item.value);
}
},
//当智能提示框关闭后会触发此事件,ui是空对象
close : function(event, ui) {
console.log("close");
},
//当自动完成组件创建时回调此方法,ui是空对象
create : function(event, ui) {
console.log("create");
},
//当提示列表中的某一项获取焦点时触发此事件,其中ui.item就是获得焦点的那一项
//只有使用键盘选择某一项时,才会更新文本框中的值,使用鼠标不更新文本框的值,但是都会触发此事件
focus : function(event, ui) {
console.log("focus:" + ui.item.value);
},
//当提示列表打开后触发此事件,ui是空的对象
open : function(event, ui) {
console.log("open");
},
//在search事件触发之后,列表显示之前会触发此事件,其中ui.content是即将显示在列表中的内容,已经标准化过了,是包含label和value的对象数组
response : function(event, ui) {
console.log("content length:" + ui.content.length);
//在每个对象的label属性中增加一个索引,使用$.each()方法遍历对象数组,第一个参数是数组,第二个参数是回调方法,每遍历一个对象会回调一次该方法,该方法第一个参数是索引,第二个参数是对象,如果该方法返回false,表示跳出遍历,如果返回true,继续下一个对象遍历。
$.each(ui.content, function(i, obj) {
obj.label += i;
if (i == 5) {
return false;
}
});
},
//在minLength满足后,delay之后会首先触发该事件,具体作用不详,传进来的ui是一个空的对象
search : function(event, ui) {
console.log("search");
},
//当列表中的某一个像被选中后触发此事件,参数和focus是一样的
select : function(event, ui) {
console.log("select:" + ui.item.value);
//event.preventDefault();使用这个函数可以阻止事件的默认行为,比如选择某一项的默认行为就是更新文本框的值,如果调用该方法,则不会更新文本框的值。但是不能阻止列表关闭。
}
});
$("#close").button().click(function() {
autocomplete.autocomplete("close");//关闭智能提示框
});
$("#destroy").button().click(function() {
autocomplete.autocomplete("destroy");//销毁智能提示框,输入框将不再具有提示功能
});
$("#disable").button().click(function() {
autocomplete.autocomplete("disable");//禁用智能提示框,输入框将不再具有提示功能
});
$("#enable").button().click(function() {
autocomplete.autocomplete("enable");//启用智能提示框,输入框将不再具有提示功能
});
$("#isDisabled").button().click(function() {
var isDisabled = autocomplete.autocomplete("option", "disabled");//获取智能提示是否禁用的状态
console.log("isDisabled:" + isDisabled);
});
$("#option").button().click(function() {
var option = autocomplete.autocomplete("option");//获取智能提示框所有配置信息
var optionStr = "";
//遍历配置信息
for ( var p in option) {
optionStr += p + ":" + option[p] + "\n";
}
console.log("Option:\n" + optionStr);
});
$("#setDelay").button().click(function() {
autocomplete.autocomplete("option", "delay", 2000);//设置下拉列表延迟时间为2s
});
$("#search").button().click(function() {
//调用之后会触发search事件,可以设置回调方法,实践证明,不能触发search事件的回调方法,funk,那这个方法作用是啥啊?
autocomplete.autocomplete("search", "");
});
//创建catcomplete组件
$("#catcomplete").catcomplete({
source : categories
});
//创建combobox组件
var combobox = $("#combobox").combobox();
//遍历一下combobox对象的属性和方法
var optionStr = "";
for ( var p in combobox) {
optionStr += p + "\n";
}
console.log(optionStr);
});
</script>
</head>
<body>
<div class="ui-widget">
<label for="tags">autocomplete: </label> <input id="tags" />
</div>
<!--
<button id="close">关闭智能提示框</button>
<button id="destroy">销毁智能提示框</button>
<button id="disable">禁用智能提示</button>
<button id="enable">启用智能提示</button>
<button id="isDisabled">获取智能提示是否禁用状态</button>
<button id="option">获取智能提示框所有配置信息</button>
<button id="setDelay">设置列表延迟时间</button>
<button id="search">触发search事件</button>
-->
<div class="ui-widget">
<label for="catcomplete">catcomplete: </label><input id="catcomplete" />
</div>
<div class="ui-widget">
<label>Your preferred programming language: </label> <select id="combobox">
<option value="">Select one...</option>
<option value="ActionScript">ActionScript</option>
<option value="AppleScript">AppleScript</option>
<option value="Asp">Asp</option>
<option value="BASIC">BASIC</option>
<option value="C">C</option>
<option value="C++">C++</option>
<option value="Clojure">Clojure</option>
<option value="COBOL">COBOL</option>
<option value="ColdFusion">ColdFusion</option>
<option value="Erlang">Erlang</option>
<option value="Fortran">Fortran</option>
<option value="Groovy">Groovy</option>
<option value="Haskell">Haskell</option>
<option value="Java">Java</option>
<option value="JavaScript">JavaScript</option>
<option value="Lisp">Lisp</option>
<option value="Perl">Perl</option>
<option value="PHP">PHP</option>
<option value="Python">Python</option>
<option value="Ruby">Ruby</option>
<option value="Scala">Scala</option>
<option value="Scheme">Scheme</option>
</select>
</div>
<button id="toggle">Show underlying select</button>
</body>
</html>
jquery.ui.widget详解的更多相关文章
- jquery ui tabs详解(中文)
		
1 属性1.11 ajaxOptions,当选项卡加载内容时,添加一个ajax选项.只有ajax时,添加的ajax选项才起作用.默认值为null.上面的例子中,添加了beforeSend和succes ...
 - Jquery UI dialog 详解 (中文)
		
转载▼ 1 属性 1.11 autoOpen ,这个属性为true的时候dialog被调用的时候自动打开dialog窗口.当属性为false的时候,一开始隐藏窗口,知道.dialog("op ...
 - jquery的css详解(二)
		
jq的工具方法style用于设置样式,jq的实例方法css在设置样式时就是调用的它,接下来分析一下源码. jQuery.extend({ ............................ st ...
 - Jquery ui widget开发
		
Jquery ui 提供了一些基本的widget,但是他提供了很好的机制来创建widget.在jquery css framework中包含了基本的css样式(视觉和感觉诸如颜色,字体大小,图标等), ...
 - jQuery.attr()  函数详解
		
一,jQuery.attr() 函数详解: http://www.365mini.com/page/jquery-attr.htm 二,jQuery函数attr()和prop()的区别: http: ...
 - jQuery 事件用法详解
		
jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...
 - 使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
		
使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins) Note 这一章节的内容是基于 Scott Gonzalez 一篇博客 Building ...
 - JQuery UI Widget Factory官方Demo
		
<!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...
 - jQuery UI Widget(1.8.1)工作原理--转载
		
先看下代码的相关注释: /*! * jQuery UI Widget 1.8.1 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/abo ...
 
随机推荐
- 能跨域和跨浏览器的flashcookie for jquery插件
			
对于写网站时需要跨域和跨浏览器的可以看看这个. 引入jquery 和 swfstore.min.js 就可以了,蛮简单好用的,会jquery基础就可以咯. mySwfStore.set('myKey ...
 - [USACO1.1]坏掉的项链Broken Necklace
			
题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...
 - noip模拟赛(10.4) 背包(pack)
			
[题目描述] 蛤布斯有n种商品,第i种物品的价格为ai,价值为bi.有m个人来向蛤布斯购买商品,每个人每种物品只能购买一个.第j个人有cj的钱,他会不停选择一个能买得起的价格最高的商品买走(如果有多个 ...
 - Java—FileOperator
			
//基本用法 JFileChooser jfc = new JFileChooser(); int result = jfc.showOpenDialog(this); if(result != JF ...
 - 【转】如何利用logrotate工具自动切分滚动中的日志文件
			
FROM : http://www.2cto.com/os/201503/381812.html 在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或da ...
 - Wcf:可配置的服务调用方式
			
添加wcf服务引用时,vs.net本来就会帮我们在app.config/web.config里生成各种配置,这没啥好研究的,但本文谈到的配置并不是这个.先看下面的图: 通常,如果采用.NET的WCF技 ...
 - [MetaHook] Quake FMOD player demo
			
CFMOD.h #ifndef CFMOD_H #define CFMOD_H #include "qfmod.h" struct Sound_t { char *pszName; ...
 - CentOS 7下的 Mysql 主从配置
			
最近在玩mysql主从配置,在此记录一下 一.前言 1.安装两个虚拟机(CentOS 7).iP分别是192.168.47.131 和192.168.47.133.其中192.168.47.133作为 ...
 - EF下泛型分页方法,更新方法
			
/// <summary> /// 获取分页的分页集合 /// </summary> /// <typeparam name="S">实体类型& ...
 - Qt学习笔记网络(一)
			
Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定 新建一个控制台应用程序 看一下QNetworkAccessManager的帮助文档 需要添加Qt + = ...