1. 以下组件基于 bootstrap 3.3.6版(按需),Jquery 1.11.x 或 2.x以上版本;其它版本存在兼容问题;
2. 新项目尤其是需要适配移动端,Jquery请使用 1.11.x 或 2.x以上版本;低版本存在兼容问题,并注意live、off等已经被删除的方法;
以及对元素自有属性(disable、checked等)合理使用prop,代替attr方法;
3. 未明确标注引用Bootstrap包(JS、CSS)的非BS组件,不受BS约束;
@梁磊
@update:2016-10-20
部分示例代码来源网络,未做校验,如有问题请及时指出
新版手册:http://lianglei.net.cn/demo-ui/platform-help/htmldemo/
Datatable组件可实现表格分页、排序、搜索、行列冻结等功能;常用jquery UI版本;bootstrap版本是基于该版本之上的;
官网地址:https://datatables.net/ 中文社区:http://datatables.club/
包间存在依赖关系,顺序不可变;根据功能需要选用组件包
dataTables.bootstrap.css
jquery.dataTables.min.js
dataTables.bootstrap.min.js
fixedColumns.bootstrap.min.css
dataTables.fixedColumns.min.js
select.bootstrap.min.css
dataTables.select.min.js
<style>
table .spanwhite-space {
display: inline-block;
width: 100%;
text-overflow: ellipsis;
-moz-text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
</style>
var table = $('#example1').DataTable( {
scrollY: "300px",//可选,是否固定表格高度,不包括表头;
scrollX: true,//可选是否显示水平滚动条;默认false;
scrollCollapse: true,//与scrollY结合使用,是否固定高度,默认false;
paging: true,//是否显示分页组件
pageLength:20,//每页显示条数;paging=false 时该值为 -1
lengthChange:false, //是否允许用户改变表格每页显示的记录数,显示条数组件
ordering : false,//是否启用排序组件,优先级高于columns中的排序控制;
searching: false,//是否启用自带搜索组件;
info: true, //是否显示数据条数信息
language : {url:"js/plugins/datatables/zh_cn.js"},//自定义提示语言
//destroy: true, //销毁一个已经存在的Datatables,然后创建一个新的
columns: [//可选,必须定义全部列属性;data 对应数据接口字段名称
/* {
"data": null,
"className": "text-center hhhdd",
"width": "30px",
render: function (data, type, row, meta) {
// 显示行号(页码*size+curPageDataindex)
// var startIndex = meta.settings._iDisplayStart;
// return startIndex + meta.row + 1;
return 1+meta.row; //当前页序号
}
}, */
//data为null,不对应任何数据字段,并通过defaultContent自定义单元格内容,带数据的自定义参照render
//{ "data": null, "defaultContent": '<input type="checkbox" name="checkbox1">' },
//模拟checkbox
//{ "data": null, "className":'select-checkbox', "defaultContent": ''},
//带数据的
{ "data": "DT_RowId",
"render": function(data, type, row, meta){ //data:当前字段DT_RowId;row:当前整行数据
/* 将数据绑定在table元素上,不建议使用此方式,
* 建议统一使用 tr:dataAPI进行数据绑定,详见下方 ajax-dataSrc
*/
//return '<button class="btn btn-success btn-xs" type="button" data-itemtext = "'+row.name1+'" data-itemid = "'+data+'">选择</button>';
return '<button class="btn btn-success btn-xs" type="button">选择</button>';
}
},
/* 限制宽度并溢出。。。应用样式 .spanwhite-space
{"data": "last_name","width":"30px", render: function (data, type, row, meta){
return ''+data+'';
}
},
*/
{ "data": "first_name"},
{ "data": "last_name" },
{ "data": "position","className":"text-right" },
{ "data": "office","className":"text-center" },
{ "data": "start_date" },
{ "data": "salary" },
{ "data": "node1" },
{ "data": "node2" },
{ "data": "node3" }
],
/*columnDefs: [{//可选,使用规则同columns,用来单独定义某几个列属性
orderable: false,//是否可排序
className: 'select-checkbox',//显示模拟复选框
targets: 0 //将配置应用于某列,下标从0开始;
}],*/
/*fixedColumns:{//可选,锁定左侧、右侧各两列,需引用列冻结包
leftColumns: 2,
rightColumns: 2
},*/
//initComplete:function(settings, json ){resizeIframeHeight();},//组件及数据初始化完成 (iframe 框架用到)
//drawCallback: function(settings){resizeIframeHeight();},//视图渲染完成,每次破坏性操作均出发该事件(iframe 框架用到)
processing: true,//显示加载中,serverSide=true时生效
serverSide: true,//服务器模式,排序、搜索、分页均在服务器端实现,默认浏览器模式
select:{style:'mutil', info: false},//是否启用选中状态,需引入选中组件包,style:'mutil'为多选,默认单选'os'
ajax: {
"url": "demotabledata.js",//接口地址
"dataSrc": function (dd) {
/* 重构接口返回的数据结构,将需要交互的数据(pkeyid)以自定义键值对的形式存到‘DT_RowData’中,
* 获取数据时使用$('tr').data('itemid')方式;
*/
var D_ = dd.data;
for ( var i=0, ien=D_.length ; i<ien ; i++ ) {
D_[i]['DT_RowData'] = {
'itemid':D_[i]['DT_RowId'],
'itemtext':D_[i]['last_name']
};
}
return D_;
},
"data": function(d){
//自定义方法,仅限CRM框架中使用,重构发送到服务器端的参数结构;searchParemOBj_对象类型,为附加请求参数,不可使用保留字pageSize、start、draw;
return cus_dt_ajaxdata(d,searchParemOBj_);
}
}
});
/* 获取选中行的数据(多选) */
//table 为当前页面作用域内初始化后的dt对象实例;selected类必须引入select包
//数据组成建议使用数据,利用join拼接,避免使用substring
var ids=[];
table.rows('.selected').nodes().to$().each(function(){
ids.push($(this).data('itemid'));
});
return ids.join(',');
/* 重新加载数据 */
table.ajax.reload(); //重新请求当前接口地址
table.ajax.url( 'newData.json' ).load(); //更改接口地址并请求
table.page(index).draw(false); //跳转到第(index+1)页,index从0 开始
/* 应用当前数据重绘表格 */
table.draw();
/* 全选、全不选 */
table.rows().select();
table.rows().deselect();
/* 事件监听 */
// 真实checkbox联动事件,模拟的不需要
table.on('select.dt', function ( e, dt, type, indexes ){
if ( type === 'row' ) {
var t_ = table.rows(indexes).nodes().to$(); //获取当前行,并转化为jQuery对象
t_.find('input[type="checkbox"]').prop('checked',true);
}
}).on('deselect.dt', function ( e, dt, type, indexes ){
if ( type === 'row' ) {
var t_ = table.rows(indexes).nodes().to$();
t_.find('input[type="checkbox"]').prop('checked',false);
}
});
/* API实例可以通过以下方式创建: */
$( selector ).DataTable();
$( selector ).dataTable().api();
new $.fn.dataTable.Api( selector );
上面三种方式均可返回一个api实例,注意区别 $( selector ).DataTable() 和 $( selector ).dataTable() 前者直接返回API实例,后者返回的是jQuery实例(如果是这个方式初始化Datatables,那么返回的对象不能使用api方法,不然会报方法未定义)
可以互转 ,jquery转api:dt.api();api转jquery:dt.to$();
var table = $('#myTable').DataTable();
OR:
var table = $('#myTable').dataTable().api();
OR:
var table = new $.fn.dataTable.Api( '#myTable' );
var data = table.rows().data()[0];
Validate组件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。
官网地址:https://jqueryvalidation.org/
中文教程:http://www.runoob.com/jquery/jquery-plugin-validate.html
jquery.validate.min.js
$.validator.setDefaults({
//debug:true, 测试时使用,阻止表单默认提交
//onsubmit:true,//默认 true,指定是否提交时验证。
//errorElement:"em",//默认 "label"。指定使用什么标签标记错误
//errorClass:"cusvaldateerror",//默认 "error"。指定错误提示的 css 类名
//onkeyup:false, //默认 true,指定是否在敲击键盘时验证。
//ignore:".nocheck", // 对某些元素不进行验证。默认 :hidden; 不验证的元素还包括:submit, :reset, :image, :disabled
success:function(a,e){console.log(e);
//要验证的元素通过验证后的动作
},
errorPlacement:function(error,element){
//跟一个函数,可以自定义错误放到哪里
//error.appendTo(element.parent());
}
});
var validator = $("#signupForm").validate({option});
//Option 同上面的 setDefaults::option;
$(".selector").validate({
submitHandler:function(form) {
$(form).ajaxSubmit();//ajax提交表单或 form.submit();
}
});
| 序号 | 规则 | 描述 |
|---|---|---|
| 1 | required:true | 必须输入的字段。 |
| 2 | remote:"check.php" | 使用 ajax 方法调用 check.php 验证输入值。 |
| 3 | email:true | 必须输入正确格式的电子邮件。 |
| 4 | url:true | 必须输入正确格式的网址。 |
| 5 | date:true | 必须输入正确格式的日期。日期校验 ie6 出错,慎用。 |
| 6 | dateISO:true | 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。 |
| 7 | number:true | 必须输入合法的数字(负数,小数)。 |
| 8 | digits:true | 必须输入整数。 |
| 9 | creditcard: | 必须输入合法的信用卡号。 |
| 10 | equalTo:"#field" | 输入值必须和 #field 相同。 |
| 11 | accept: | 输入拥有合法后缀名的字符串(上传文件的后缀)。 |
| 12 | maxlength:5 | 输入长度最多是 5 的字符串(汉字算一个字符)。 |
| 13 | minlength:10 | 输入长度最小是 10 的字符串(汉字算一个字符)。 |
| 14 | rangelength:[5,10] | 输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。 |
| 15 | range:[5,10] | 输入值必须介于 5 和 10 之间。 |
| 16 | max:5 | 输入值不能大于 5。 |
| 17 | min:10 | 输入值不能小于 10。 |
使用方法: (必需, 最小两个字母):
<input name="name" type="text" minlength="2" required>
$("#signupForm").validate({
rules: {
firstname: "required",
password: {
required: true,
minlength: 5
},
confirm_password: {
required: true,
minlength: 5,
equalTo: "#password"
},
email: {
required: true,
email: true,
remote: "ajaxUrl" //使用远程异步验证
}
},
messages: {
firstname: "请输入您的名字",
password: {
required: "请输入密码",
minlength: "密码长度不能小于 5 个字母"
},
confirm_password: {
required: "请输入密码",
minlength: "密码长度不能小于 5 个字母",
equalTo: "两次密码输入不一致"
},
email: {
email:"请输入一个正确的邮箱",
remote : "服务器验证失败"
}
}
});
/* 异步验证 */
//使用 ajax 方式进行验证,默认会提交当前验证的值到远程地址,如果需要提交其他的值,可以使用 data 选项。
PS:远程地址只能输出 "true" 或 "false",不能有其他输出。
remote: "check-email.php"
remote: {
url: "check-email.php", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
// async : false, //同步请求,默认true(建议使用 true,并结合使用submitHandler回调方法提交表单)
/* PS:如使用validator.form() && form.submit()方式验证提交表单,请改成同步 */
data: { //要传递的数据
username: function() {
return $("#username").val();
}
}
}
/*
* addMethod(name,method,message)方法
* 参数 name 是添加的方法的名字。
* 参数 method 是一个函数,接收三个参数 (value,element,param) 。
* value 是元素的值,element 是元素本身,param 是参数
*/
//实例1:
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
var length = value.length;
for(var i = 0; i < value.length; i++){
if(value.charCodeAt(i) > 127){
length++;
}
}
return this.optional(element) || ( length >= param[0] && length <= param[1] );
}, $.validator.format("请确保输入的值在{0}-{1}个字节之间(一个中文字算2个字节)"));
//实例2:只能输一个字母,范围是 a-f,
$.validator.addMethod("af",function(value,element,params){
if(value.length>1){
return false;
}
if(value>=params[0] && value<=params[1]){
return true;
}else{
return false;
}
},"必须是一个字母,且a-f");
//实例3: 邮政编码验证
jQuery.validator.addMethod("isZipCode", function(value, element) {
var tel = /^[0-9]{6}$/;
return this.optional(element) || (tel.test(value));
}, "请正确填写您的邮政编码");
//实例4: 新规则要求值必须与第一个参数相同
$.validator.methods.equal = function(value, element, param) {
return value == param;
};
/* 使用方法: */
rules: {
name1: {
required:true,
"isZipCode":true
},
name2: "isZipCode",
name3: {
equal: 11
}
}
PS:
后边两种常用于,表单中需要同时填或不填的元素。
PS:
API:http://v3.bootcss.com/javascript/#modals
包含常用的prompt层、提示层【layer.msg('玩命提示中');】、tips、modal
官网:http://layer.layui.com/
PS:
/*
打开弹窗
@param tit 弹窗名称
@param url frame地址
@param partOBJ 窗口对象 parent || top || window(self)
@param opt = {}配置属性
*/
var cum_Modalindex_ = 0; //记录弹窗索引
var cum_ModalValobj = null; //记录弹窗透传数据对象
function cumCurWinModal(tit,url,partOBJ,opt){
var partOBJ_ = partOBJ || window;
var param ={
"area":['90%', '80%'], /* ['90%', '80%'] or ['500px', '300px'] */
"scrollbar":false, /* 是否屏蔽滚动条 true:屏蔽滚动条 */
"ismax":false, /* 是否显示最大化按钮 */
"callid":'' /* 回调元素ID */
}
if(typeof opt !== "undefined"){$.extend(param, opt);}
partOBJ_.layer.open({
type: 2
,title: tit
,area: param['area']
,content: url
,scrollbar: (param['scrollbar'] && !partOBJ_.$('html').attr('layer-full'))?false:true
,maxmin: param['ismax']
,zIndex: partOBJ_.layer.zIndex
,success: function(layero,ind_){
partOBJ_.layer.setTop(layero);
var index = partOBJ_.layer.getFrameIndex(window.name);
console.log(index+"$$$"+ind_);
if(index){
var iWin_ = partOBJ_[layero.find('iframe')[0]['name']]; //返回目标window对象,window.fun()
iWin_.cum_Modalindex_ = index;
if(param['callid']){
iWin_.cum_ModalValobj = param['callid'];
}
}
}
});
}
/*
在iframe父窗口中打开弹窗
@param tit 弹窗名称
@param url frame地址
@param opt => @function :: cumCurWinModal
*/
function cumParentWinModal(tit,url,opt){
if(typeof opt !== "undefined"){$.extend(opt,{"ismax":true});}
cumCurWinModal(tit,url,parent,opt);
}
//使用方法:
// cumParentWinModal('标题','pageUrl',{"scrollbar":true,"area":["800px","460px"]});
//在父窗口中打开弹窗并显示最大化按钮、隐藏浏览器滚动条
老牌弹窗组件,简单易用,但不支持多个重叠;http://www.jacklmoore.com/colorbox/
// Examples:
// Image links displayed as a group
$('a.gallery').colorbox({rel:'gal'});
// Ajax
$('a#login').colorbox();
// Called directly, without assignment to an element:
$.colorbox({href:"thankyou.html"});
// Called directly with HTML
$.colorbox({html:"<h1>Welcome</h1>"});
// Colorbox can accept a function in place of a static value:
$("a.gallery").colorbox({rel: 'gal', title: function(){
var url = $(this).attr('href');
return '<a href="' + url + '" target="_blank">Open In New Window</a>';
}});
网址:https://github.com/rochal/jQuery-slimScroll
组件包
jquery.slimscroll.min.js
简单实例
$(selector).slimScroll();
配置实例
$(function() {
$(".slimscroll").slimScroll({
width: 'auto', //可滚动区域宽度
height: '100%', //可滚动区域高度
size: '10px', //组件宽度
color: '#000', //滚动条颜色
position: 'right', //组件位置:left/right
distance: '0px', //组件与侧边之间的距离
start: 'top', //默认滚动位置:top/bottom
opacity: .4, //滚动条透明度
alwaysVisible: true, //是否 始终显示组件
disableFadeOut: false, //是否 鼠标经过可滚动区域时显示组件,离开时隐藏组件
railVisible: true, //是否 显示轨道
railColor: '#333', //轨道颜色
railOpacity: .2, //轨道透明度
railDraggable: true, //是否 滚动条可拖动
railClass: 'slimScrollRail', //轨道div类名
barClass: 'slimScrollBar', //滚动条div类名
wrapperClass: 'slimScrollDiv', //外包div类名
allowPageScroll: true, //是否 使用滚轮到达顶端/底端时,滚动窗口
wheelStep: 20, //滚轮滚动量
touchScrollStep: 200, //滚动量当用户使用手势
borderRadius: '7px', //滚动条圆角
railBorderRadius: '7px' //轨道圆角
});
});
事件实例
$(selector).slimScroll().bind('slimscroll', function(e, pos){
console.log("Reached " + pos");
});
网址:http://manos.malihu.gr/jquery-custom-content-scroller/
组件包
<link rel="stylesheet" href="jquery.mCustomScrollbar.css" /> <script src="jquery.mCustomScrollbar.concat.min.js"></script>
实例
<div class="mCustomScrollbar" data-mcs-theme="dark">
<!-- your content -->
</div>
$(".content").mCustomScrollbar();
//Basic configuration & option parameters
$(".content").mCustomScrollbar({
axis:"x" // horizontal scrollbar
});
$(".content").mCustomScrollbar({
theme:"dark"
});
“焦点图/幻灯片”“Tab标签切换”“图片滚动”“无缝滚动”
官网:http://www.superslide2.com/
包含常用的prompt层、提示层【layer.msg('玩命提示中');】、tips、modal
官网:http://layer.layui.com/
网址:http://www.dowebok.com/77.html
下载地址:https://github.com/alvarotrigo/fullPage.js
PS: scrollOverflow 设置为 true,且引入 jquery.slimscroll.min.js,可支持本页内内容溢出添加滚动条;
网址:http://www.swiper.com.cn/
PC: 2.x ; APP: 3.x
官网:http://www.bootcss.com/p/bootstrap-datetimepicker/
bootstrap-datepicker(没有时间) 官网:http://bootstrap-datepicker.readthedocs.io/en/latest/
daterangepicker 官网:http://www.daterangepicker.com/
1、解压后,将jedate整个文件放至您项目的任意目录 2、控件不支持选周 3、 此为PC日期控件,非手机日期控件 浏览器兼容,下面是我们的主要兼容目标 1、Internet Explorer >= 8 (Windows), IE8以下浏览器不兼容 2、Safari (Mac) 3、Chrome (Windows, Mac, iOS, Linux) 4、Firefox (Windows, Mac, Linux) 5、谷歌内核(webkit)浏览器,如360浏览器,搜狗浏览器,QQ浏览器等
官网:http://www.jayui.com/jedate/
PS: 仅限原生HTML-input元素,组件请使用对应API
<input type="radio" name="testradio" value="" />
$('input[name="testradio"]:checked').val();
//选中:
$('input[name="testradio"]').eq(0).prop('checked',true); //根据下标
$('input[name="testradio"][value="111"]').prop('checked',true); //根据value值
<input type="checkbox" name="testcheckbox" value="" />
var ids_ =[];
$('input[name="testcheckbox"]:checked').each(function(){
var t_= $(this);
ids_.push(t_.val());
});
return ids_.join(','); //用,号分割;
//选中:
$('input[name="testcheckbox"]').eq(0).prop('checked',true); //根据下标
$('input[name="testcheckbox"][value="111"]').prop('checked',true); //根据value值
<select id="testSelect"><option value="">text</option></select>
$('#testSelect').val(); //获取当前选中项的value
$("#testSelect").find("option:selected").text(); // 获取当前选中项的text
$(".selector1").change(function(){ //select的级联
// 先清空第二个
$(".selector2").empty();
// 实际的应用中,这里的option一般都是用循环生成多个了
var option = $("<option>").val(1).text("pxx");
$(".selector2").append(option);
});
//选中:
$('#testSelect').val('111'); //设置value为111的项选中
PS:序列表表格内容为字符串,用于 Ajax 请求。
<form>
<select name="single">
<option>Single</option>
<option>Single2</option>
</select>
<select name="multiple" multiple="multiple">
<option selected="selected">Multiple</option>
<option>Multiple2</option>
<option selected="selected">Multiple3</option>
</select><br/>
<input type="checkbox" name="check" value="check1"/> check1
<input type="checkbox" name="check" value="check2" checked="checked"/> check2
<input type="radio" name="radio" value="radio1" checked="checked"/> radio1
<input type="radio" name="radio" value="radio2"/> radio2
</form>
$("form").serialize(); //输出a=1&b=2&c=3&d=4&e=5
$("form").serializeArray(); //输出:
[
{name: 'firstname', value: 'Hello'},
{name: 'lastname', value: 'World'},
{name: 'alias'}, // 值为空
]
获取子页面 window
window['iframeName']
$('#iframeId')[0].contentWindow
window.frames["iframeName"]
获取子页面 DOM
$(window.frames["iframeName"].document).find('#id')
$('#iframeId').contents().find('#id');
子操作父类 DOM
parent.$('#id').val()
$('#id', parent.document).val()
子操作父类 function
parent.yourfun(); //yourfun() 在父页面定义
老牌富文本编辑器,前身是FCKEditor
网址:http://ckeditor.com/demo#standard
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<textarea rows="30" cols="50" name="editor01">请输入.</textarea>
<script type="text/javascript">CKEDITOR.replace('editor01');</script>
百度旗下产品,微信公众号管理后台使用的就是这个
网址:http://ueditor.baidu.com/website/umeditor.html
支持文件多选,类型过滤,拖拽(文件&文件夹),图片粘贴功能。
粘贴功能主要体现在当有图片数据在剪切板中时(截屏工具如QQ(Ctrl + ALT + A), 网页中右击图片点击复制),Ctrl + V便可添加此图片文件。
支持常用图片格式jpg,jpeg,gif,bmp,png预览与压缩,节省网络数据传输。
网址:http://fex.baidu.com/webuploader/getting-started.html
<!--引入CSS-->
<link rel="stylesheet" type="text/css" href="webuploader文件夹/webuploader.css">
<!--引入JS-->
<script type="text/javascript" src="webuploader文件夹/webuploader.js"></script>
<!--html:-->
<div id="uploader" class="wu-example">
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list"></div>
<div class="btns">
<div id="picker">选择文件</div>
<button id="ctlBtn" class="btn btn-default">开始上传</button>
</div>
</div>
<!--初始化Web Uploader-->
var uploader = WebUploader.create({
// swf文件路径
swf: BASE_URL + '/js/Uploader.swf',
// 文件接收服务端。
server: 'http://webuploader.duapp.com/server/fileupload.php',
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#picker',
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
resize: false,
// 只允许选择图片文件。
accept: {
title: 'Images', //文字描述
extensions: 'gif,jpg,jpeg,bmp,png', //允许的文件后缀,不带点,多个用逗号分割。
mimeTypes: 'image/*' //多个用逗号分割。
}
});
<!--显示用户选择-->
// 当有文件被添加进队列的时候
uploader.on( 'fileQueued', function( file ) {
$list.append( '<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<p class="state">等待上传...</p>' +
'</div>' );
});
<!--文件上传进度-->
// 文件上传过程中创建进度条实时显示。
uploader.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress .progress-bar');
// 避免重复创建
if ( !$percent.length ) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}
$li.find('p.state').text('上传中');
$percent.css( 'width', percentage * 100 + '%' );
});
<!--文件成功、失败处理-->
uploader.on( 'uploadSuccess', function( file ) {
$( '#'+file.id ).find('p.state').text('已上传');
});
uploader.on( 'uploadError', function( file ) {
$( '#'+file.id ).find('p.state').text('上传出错');
});
uploader.on( 'uploadComplete', function( file ) {
$( '#'+file.id ).find('.progress').fadeOut();
});
更多API : http://fex.baidu.com/webuploader/doc/index.html#WebUploader_Uploader_options
官网:https://www.jstree.com/
浏览器兼容:Chrome 14+, Firefox 3.5+, Opera 12+, Safari 4+, IE8+
demo:demo-tree.html
<script src="js/plugins/jsTree/jstree.min.js"></script>
//初始化
$('#jstree1').jstree({
'core' : {
'check_callback' : true
},
'plugins' : ['types'],
'types' : { //样式图标,可选
'default' : {
'icon' : 'fa fa-folder'
},
'html' : {
'icon' : 'fa fa-file-code-o'
},
'svg' : {
'icon' : 'fa fa-file-picture-o'
},
'css' : {
'icon' : 'fa fa-file-code-o'
},
'img' : {
'icon' : 'fa fa-file-image-o'
},
'js' : {
'icon' : 'fa fa-file-text-o'
}
}
}).on("changed.jstree", function (e, data) {//事件监听
if(data && data.selected && data.selected.length) {
var h = [];
h.push('id:',data.selected,'<br/>');//选中的节点id
h.push('OR-id:',data.node.id,'<br/>');//通过选择的节点node对象获取 Id及text
h.push('node-text:',data.node.text);
console.log(data.node.data['jstree']['type']);
layer.alert(h.join(''));
}
});
function demo_create() {//创建节点
var ref = $('#jstree1').jstree(true), //获取tree对象
sel = ref.get_selected(); //获取选中的节点ID;get_selected(true),获取选中的节点对象,返回OBJ(id,text...)
if(!sel.length) { return false; }
sel = sel[0];
sel = ref.create_node(sel, {"type":"html"});
if(sel) {
ref.edit(sel);
}
};
function demo_rename() {//重命名节点
var ref = $('#jstree1').jstree(true),
sel = ref.get_selected();
if(!sel.length) { return false; }
sel = sel[0];
ref.edit(sel);
};
function demo_delete() {//删除节点
var ref = $('#jstree1').jstree(true),
sel = ref.get_selected();
if(!sel.length) { return false; }
ref.delete_node(sel);
};
// AJAX
$('#tree').jstree({
'core' : {
'data' : {
'url' : '/get/children/',
'data' : function (node) {
return { 'id' : node.id };
}
}
});
### ps
[
{ "text" : "ajax-Child 1","icon":"fa fa-file-text-o","children" : true},
{ "text" : "state-Child 2","icon":"fa fa-file-text-o", "children" : ["One more"] }
]
//静态 data #1:
$('#using_json').jstree({
'core' : {
'data' : [
{
'id' : 'node_2',
'text' : 'Root node with options',
'state' : { 'opened' : true, 'selected' : true },
'children' : [ { 'text' : 'Child 1' }, 'Child 2']
}
]
}
});
### PS:
{
id : "string" // will be autogenerated if omitted
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
children : [] // array of strings or objects
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
//静态 data #2:list child=> parent
$('#using_json_2').jstree({ 'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Simple root node" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
} });
### PS:
{
id : "string" // required
parent : "string" // required
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
参考网址:http://www.bootcss.com/p/icheck/
PS: 结合bootstrap使用,需留意input:margin-left: -20px;的影响, 可对input.radio 反向应用 parent.ele.checkbox[checked-inline]
// 应用于所有input (只应用于 checkboxes and radio buttons)
$('input').iCheck();
// 应用于 class=block 内部的所有 checkboxes and radio
$('.block input').iCheck();
// 应用于 class=vote 内部的所有 checkboxes and radio
$('.vote').iCheck();
$('input').iCheck('check'); — 将输入框的状态设置为checked
$('input').iCheck('uncheck'); — 移除 checked 状态
$('input').iCheck('toggle'); — toggle checked state
$('input').iCheck('disable'); — 将输入框的状态设置为 disabled
$('input').iCheck('enable'); — 移除 disabled 状态
$('input').iCheck('update'); — apply input changes, which were done outside the plugin
$('input').iCheck('destroy'); — 移除iCheck样式
| 事件名称 | 使用时机 |
|---|---|
| ifClicked | 用户点击了自定义的输入框或与其相关联的label |
| ifChanged | 输入框的 checked 或 disabled 状态改变了 |
| ifChecked | 输入框的状态变为 checked |
| ifUnchecked | checked 状态被移除 |
| ifDisabled | 输入框状态变为 disabled |
| ifEnabled | disabled 状态被移除 |
| ifCreated | 输入框被应用了iCheck样式 |
| ifDestroyed | iCheck样式被移除 |
/* 全选 演示地址: http://www.cctvplus.com/news/latest.shtml */
$('#Locations_data_box input[type="checkbox"]').on('ifChecked ifUnchecked',function(e_){
var inp_data_all_ = $('#Locations_data_box input[type="checkbox"][class="data_all"]');
var inp_data_items_ = $('#Locations_data_box input[type="checkbox"][class="data_item"]');
if($(this).hasClass('data_all')){//点击全选
if(e_.type == 'ifChecked'){
inp_data_items_.prop('checked','checked');
}else{
inp_data_items_.removeProp('checked');
}
inp_data_items_.iCheck('update').iCheck('enable');
}
var che_1=[];
$('#Locations_data_box input[type="checkbox"][class="data_item"]:checked').each(function(){
che_1.push($(this).val());
});
if(che_1.length>0){
seach_check_LL['LOCATIONS_'] = che_1.join(',');
search_fun_LL(1);
if(che_1.length == inp_data_items_.length){
inp_data_all_.prop('checked','checked').iCheck('update').iCheck('enable'); //注意顺序
}else{
inp_data_all_.removeProp('checked').iCheck('update').iCheck('enable');
}
}else{
seach_check_LL['LOCATIONS_'] ='';
//inp_data_all_.removeProp('checked').iCheck('update');
//cusmot_alert_fun('Please select at least one Locations');
}
});
/* 自定义数据状态修改、初始化 演示地址: http://www.cctvplus.com/news/latest.shtml */
if(seach_check_LL['LOCATIONS_']){
var g_3 = seach_check_LL['LOCATIONS_'].split(',');
$('#Locations_data_box input[type="checkbox"][class="data_item"]').each(function(){
if(jQuery.inArray($(this).val(), g_3)!==-1){
$(this).prop('checked','checked');
}else{
$(this).removeProp('checked');
}
$(this).iCheck('update');
});
if($('#Locations_data_box input[type="checkbox"][class="data_item"]').not(':checked').length==0){
$('#Locations_data_box input[type="checkbox"][class="data_all"]').prop('checked','checked').iCheck('update');
}
}
参考地址:https://github.com/jakerella/jquery-mockjax
$.mockjax({
url: "/restful/fortune",
responseText: {
status: "success",
fortune: "Are you a mock turtle?"
}
});
$.getJSON("/restful/fortune", function(response) {
if ( response.status == "success") {
$("#fortune").html( "Your fortune is: " + response.fortune );
} else {
$("#fortune").html( "Things do not look good, no fortune was told" );
}
});
参考地址:http://introjs.com/
参考地址:http://bootstraptour.com/
参考地址:http://www.jquery-steps.com/