如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
问题描述:在页面选择关键词时,需要将关键词元素绑定点击事件使同一类型的关键词只有一个固定class,使其随点击更换,目的是为了让这一类型的关键词的值可以由class获取。在原本写死的关键词上绑定的事件是可用的,但是换成动态加载后发现只能适用于写死的情况。很无奈,在网上搜索一番后花了点时间终于解决了,下面奉上。
参考文章:https://blog.csdn.net/qq_35129893/article/details/78363211?locationNum=2&fps=1
原本绑定事件如下:
针对的HTML元素如下:
但是发现,原先的事件不能用于动态加载的元素,如上面加载的,加载形式如下:
无奈,只能上网寻求万能的大神了。
基本上提供的解决方案就两个,使用
或者
我先是使用.live尝试了下,发现gg,心灰意冷ing;本着试一试不要钱的心态又用.on试了下,结果令人惊喜啊!可以使用了,哎,这鬼玩意坑死人。
下面上针对我加载的界面元素写的绑定事件:
$('element').live('click',function(){})
$('父元素').on('click', '子元素', function(){})
1.什么是懒加载?
当访问一个页面的时候,先把img元素背景图片路径替换成一张替代图片的路径(这样就只需请求一次,占位图),将图片的真实路径存储在img自定义属性中,只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。
2.为什么要用懒加载?
很多页面,内容很丰富,页面很长,图片较多。比如说各种商城页面。这些页面图片数量多,而且比较大,少说百来K,多则上兆。要是页面载入就一次性加载完毕,提高首屏加载速度,可以减轻服务器压力,节约流量,用户体验好。
3.懒加载实现封装?
lazyLoad由四个函数组成,init(初始化函数),checkShow(判断图片是否加载),shouldShow(将要展示的图片),showImg(展示图片)。
(1)初始化函数(init) 由于滚动事件太消耗性能,所以用定时器替换,不是滚动就触发,而是滚动后200毫秒后触发。
var timer;
function init(){
$(window).on("scroll",function(){
if(timer){
clearTimeout(timer);
}
timer = setTimeout(function(){
checkShow(); //
},200);
});
}
(2)判断”图片是否加载“(checkshow)函数,如果图片有isload属性,就说明图片已经加载过了,直接return。如果图片没有isload属性,进入将要展示图片shouldshow函数
function checkShow(){
$lazyLoad.each(function(){
$cur = $(this);
if($cur.attr('isLoaded')){
return;
}
if(shouldShow($cur)){
showImg($cur);
}
});
}
(3)将要展示图片shouldshow函数,获取屏幕可视宽度,滚动高度,要展示的元素到文档的高度,如果元素到文档的高度小于屏幕的可视高度加上滚动高度,说明元素已在可视区内,返回true,否则返回false。
function shouldShow ($node){
var scrollH = $(window).scrollTop(),
windowH = $(window).height(),
top = $node.offset().top;
if(top < windowH + scrollH){
return true;
} else {
return false;
}
}
(4)“展示图片”函数,将元素的src属性替换为自定义属性data-src(真正图片的地址)。
function showImg ($node){
$node.find("img").attr("src",$node.data("src"));
$node.attr("isLoaded",true);
}
(5)函数返回一个对象
return {
init : init
}
这样就实现懒加载封装了!
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
1.把wxParse文件全部放入项目。
2.在wxml中import wxParse.wxml,并把template插入到到对应的位置上
3.在wxss中import wxParse.wxss,并设置样式;比如‘wxParse-image’是富文本图片转化成image组件之后的类名,‘wxParse-p’是p标签转化成view组件后设置的类名
4.js
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
(offsetTop同理)
offsetWidth(和offsetHeight):
其实就是一个元素的实际宽度 = width+padding+border
【client家族】
clientWidth (和clientHeight) = width+padding
该属性指的是元素的可视部分宽度和高度
假如元素有padding有滚动,且滚动是显示的
clientWidth = width + padding - 滚动轴宽度
clientTop(和clientLeft):
这一对属性是用来读取元素的border的宽度和高度的
clientTop = border-top 的 border-width
clientLeft = border-left 的 border-width
【scroll家族】
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
[HTML]代码
[C#后台]
<html>
<head>
<title>二维码扫描测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<style type="text/css">
html, body {
height: 100%;
width: 100%;
text-align: center;
}
</style>
<script src="../js/jquery-1.11.1.min.js"></script>
<script>
//这段代 主要是获取摄像头的视频流并显示在Video 签中
var canvas = null, context = null, video = null;
window.addEventListener("DOMContentLoaded", function () {
try {
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
video = document.getElementById("video");
flag = true,
MediaErr = function (error) {
flag = false;
if (error.PERMISSION_DENIED) {
alert('用户拒绝了浏览器请求媒体的权限', '提示');
} else if (error.NOT_SUPPORTED_ERROR) {
alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');
} else if (error.MANDATORY_UNSATISFIED_ERROR) {
alert('指定的媒体类型未接收到媒体流', '提示');
} else {
alert('系统未能获取到摄像头,请确保摄像头已正确安装。或尝试刷新页面,重试', '提示');
}
};
//获取媒体的兼容代码,目前只支持(Firefox,Chrome,Opera)
if (navigator.getUserMedia) {
//qq浏览器不支持
if (navigator.userAgent.indexOf('MQQBrowser') > -1) {
alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');
return false;
}
navigator.getUserMedia(videoObj, function (stream) {
video.src = stream;
video.play();
}, MediaErr);
}
else if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia(videoObj, function (stream) {
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, MediaErr);
}
else if (navigator.mozGetUserMedia) {
navigator.mozGetUserMedia(videoObj, function (stream) {
video.src = window.URL.createObjectURL(stream);
video.play();
}, MediaErr);
}
else if (navigator.msGetUserMedia) {
navigator.msGetUserMedia(videoObj, function (stream) {
$(document).scrollTop($(window).height());
video.src = window.URL.createObjectURL(stream);
video.play();
}, MediaErr);
} else {
alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器');
return false;
}
if (flag) {
//alert('为了获得更准确的测试结果,请尽量将二维码置于框中,然后进行拍摄、扫描。 请确保浏览器有权限使用摄像功能');
}
//这个是拍照按钮的事件,
$("#snap").click(function () { startPat(); }).show();
} catch (e) {
printHtml("浏览器不支持HTML5 CANVAS");
}
}, false);
function printHtml(content) {
$(window.document.body).append(content + "<br/>");
}
//开始拍照
function startPat() {
setTimeout(function () {//防止调用过快
if (context) {
context.drawImage(video, 0, 0, 320, 320);
CatchCode();
}
}, 200);
}
//抓屏获取图像流,并上传到服务器
function CatchCode() {
if (canvas != null) {
//以下开始编 数据
var imgData = canvas.toDataURL("image/jpeg");
//将图像转换为base64数据
var base64Data = imgData; //在前端截取22位之后的字符串作为图像数据
type: 'post',
url: '../ashx/HandlerScan.ashx?method=ParseImage',
data: 'ImgData=' + base64Data,
dataType: "json",
cache: false,
timeout: 10000,
success: function (mes) {
if (mes.code == '1') {
alert('未识别二维码,请重新扫描!');
}
else {
alert(mes.name);
}
},
error: function (err) {
alert('扫描失败' + err);
}
});
}
}
</script>
<body>
<div id="support"></div>
<div id="contentHolder">
<video id="video" width="320" height="320" autoplay></video>
<canvas id="canvas" style="display:none; background-color:#F00;" width="320" height="320"></canvas><br/>
<button id="snap" style="display:none; height:50px; width:120px;">开始扫描</button>
</div>
</body>
</html>
{
private JsonResult js = new JsonResult();
public void ProcessRequest(HttpContext context)
{
string result = string.Empty;
string method = context.Request.QueryString.ToString();//获取想要做的操作
switch (method)
{
case "method=ParseImage":
result = ParseImage(context);
break;
default:
break;
}
context.Response.ContentType = "text/json";
context.Response.Write(result);
}
{
try
{
string imgStr = context.Request.Params["ImgData"].ToString();
imgStr = imgStr.Replace("data:image/jpeg;base64,", "");
//整理字符串
imgStr = imgStr.Replace(" ", "+");
byte[] arr = Convert.FromBase64String(imgStr);
MemoryStream ms = new MemoryStream(arr, 0, arr.Length);
Bitmap bmp = new Bitmap(ms);
//解析图片
Result result = new BarcodeReader().Decode(bmp);
if(result == null)
{
return "{\"code\":1,\"name\":\"\"}";
}
else
{
string[] a = result.Text.Split(',');
string str = "{\"code\":0,\"name\":\"" + a[0] + "\"}";
return str;
}
}
catch (Exception ex)
{
return "{\"code\":1,\"msg\":\"" + ex.Message + "\",\"userName\":\"\"}";
}
}
{
get
{
return false;
}
}
}
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
1.把wxParse文件全部放入项目。
2.在wxml中import wxParse.wxml,并把template插入到到对应的位置上
3.在wxss中import wxParse.wxss,并设置样式;比如‘wxParse-image’是富文本图片转化成image组件之后的类名,‘wxParse-p’是p标签转化成view组件后设置的类名
4.js
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
微信小程序学习参考demo源码集合,仅供参考学习用途!!!
面对面翻译 微信小程序源码下载,语音翻译类小程序工具http://www.henkuai.com/thread-37499-1-1.html
开源微信小程序,小团队管理小程序下载 :http://www.henkuai.com/thread-37498-1-1.html
微信小程序多用户商城demo,还在开发中:http://www.henkuai.com/thread-37497-1-1.html
微信小程序抢课列表demo :http://www.henkuai.com/thread-37496-1-1.html
微信小程序地图实时显示demo:http://www.henkuai.com/thread-37495-1-1.html
购房摇号助手微信小程序下载:http://www.henkuai.com/thread-37471-1-1.html
使用微信小程序map组件开发的一个demo,各种坑:http://www.henkuai.com/thread-37400-1-1.html
微信小游戏2048源码下载,经典的小游戏:http://www.henkuai.com/thread-37399-1-1.html
微信小程序-菜谱百科,小程序开发学习demo :http://www.henkuai.com/thread-37380-1-1.html
鲜切水果微信小程序,水果商城小程序:http://www.henkuai.com/thread-37379-1-1.html
微信小程序线上图书馆前端+后端源码下载,图书查询小程序 :http://www.henkuai.com/thread-37378-1-1.html
微信小程序日历打卡项目下载,轻巧好用的日历打卡组件:http://www.henkuai.com/thread-37367-1-1.html
微信小程序练手项目,包含抽屉效果、底部tab效果实现等:http://www.henkuai.com/thread-37365-1-1.html
【独立小程序】志汇餐饮8.6 小程序前端修复版本:http://www.henkuai.com/thread-37344-1-1.html
仿今日头条3.0 小程序前端 demo分享:http://www.henkuai.com/thread-37338-1-1.html
微信小程序真心话大冒险游戏,朋友聚会必备小程序:http://www.henkuai.com/thread-37337-1-1.html
微信小游戏头脑王者自动答题辅助插件,小游戏作弊工具:http://www.henkuai.com/thread-37336-1-1.html
微信小程序左滑操作自定义组件,让你的小程序开发更:http://www.henkuai.com/thread-37334-1-1.html
接龙微信小程序脚本,创建房间等等:http://www.henkuai.com/thread-37469-1-1.html
微信小程序统一中央服务器的思路,校园小情书联盟:http://www.henkuai.com/thread-37468-1-1.html
辅导员预约微信小程序:http://www.henkuai.com/thread-37467-1-1.html
仿星巴克用心说微信小程序:http://www.henkuai.com/thread-37466-1-1.html
微信小程序顶部滑动导航菜单栏:http://www.henkuai.com/thread-37465-1-1.html
微信小程序朋友圈点赞功能,让你的朋友圈秀起来:http://www.henkuai.com/thread-37464-1-1.html
微信小程序版 “前端TOP100”:http://www.henkuai.com/thread-37463-1-1.html
微信小程序3D轮播图效果示例:http://www.henkuai.com/thread-37459-1-1.html
微信小程序仿滴滴打车小程序源码下载,欢迎加入开发:http://www.henkuai.com/thread-37458-1-1.html
微信小程序仿青桔单车,打开地图扫码开锁:http://www.henkuai.com/thread-37436-1-1.html
微信小程序投票器,投票小程序源码:http://www.henkuai.com/thread-37434-1-1.html
微信小程序时间轴源码,记录中国LGBT事件:http://www.henkuai.com/thread-37433-1-1.html
微信小程序api拦截器,完美兼容原生小程序项目:http://www.henkuai.com/thread-37431-1-1.html
微信小程序使用map组件实现多点定位显示:http://www.henkuai.com/thread-37421-1-1.html
微信小程序商城前端,展示婴幼儿商品: http://www.henkuai.com/thread-37418-1-1.html
答题小程序免费送,有人用这个“小程序”每天做100000:http://www.henkuai.com/thread-37412-1-1.html
总结了工作中可能经常会用到的各类正则表达式的写法。
方便以后进行查找,减少工作量。
1. 校验基本日期格式
var reg1 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
var reg2 = /^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$/;
2. 校验密码强度
密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
var reg = /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/;
3. 校验中文
字符串仅能是中文。
var reg = /^[\\u4e00-\\u9fa5]{0,}$/; 4. 由数字、26个英文字母或下划线组成的字符串 var reg = /^\\w+$/; 5. 校验E-Mail 地址
同密码一样,下面是E-mail地址合规性的正则检查语句。 var reg = /[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?/; 6. 校验身份证号码
下面是身份证号码的正则校验。15 或 18位。
15位: var reg = /^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$/; 18位: var reg = /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/; 7. 校验日期
“yyyy-mm-dd” 格式的日期校验,已考虑平闰年。 var reg = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/; 8. 校验金额
金额校验,到2位小数。 var reg = /^[0-9]+(.[0-9]{2})?$/; 9. 校验手机号
下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码) var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$/; 10. 判断IE的版本
IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。
var reg = /^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\\/[5-9]\\.0).*$/;
11. 校验IP-v4地址
var reg = /\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b/;
12. 校验IP-v6地址
var reg = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/;
13. 检查URL的前缀
应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。
if (!s.match(
/^[a-zA-Z]+:\/\//
)) {
s =
'http://' +
s;
}
14. 提取URL链接
下面的这个表达式可以筛选出一段文本中的URL。
var reg = /^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/; 15. 文件路径及扩展名校验
验证 windows下文件路径和扩展名(下面的例子中为.txt文件)
var reg = /^([a-zA-Z]\\:|\\\\)\\\\([^\\]+\\)*[^\\/:*?"<>|]+\\.txt(l)?$/; 16. 提取Color Hex Codes
有时需要抽取网页中的颜色代码,可以使用下面的表达式。
var reg = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; 17. 提取网页图片
假若你想提取网页中所有图片信息,可以利用下面的表达式。
var reg = /\\< *[img][^\\>]*[src] *= *[\\"\']{0,1}([^\\"\'\ >]*)/; 18. 提取页面超链接
提取html中的超链接。
var reg = /(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\/\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>/;
19. 查找CSS属性
通过下面的表达式,可以搜索到相匹配的CSS属性。
var reg = /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/;
20. 抽取注释
如果你需要移除HMTL中的注释,可以使用如下的表达式。
var reg = /<!--(.*?)-->/;
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
jQuery提供了JS未能提供的动画效果,利用jQuery的动画效果,可以极大的简化JS动画部分的逻辑
滑入动画
定义:以下拉方式动画效果将html内容显示出来
使用方式:
$(selector).slideDown(time,function)
time代表执行动画的时间,function代表动画执行完之后所要执行的函数
滑出动画
定义:以上滑方式动画效果将html内容隐藏出来
使用方式:
$(selector).slideUp(time,function)
time代表执行动画的时间,function代表动画执行完之后所要执行的函数
滑入滑出切换动画
定义:在滑入滑出动画间切换
使用方式:
$(selector).slideToggle(time,function)
淡入动画
作用:让元素以淡淡的进入视线的方式展现出来
使用方式
$(selector).fadeIn(time,function)
淡出动画
作用:让元素以淡淡的离开视线的方式隐藏起来
使用方式
$(selector).fadeOut(time,function)
淡入淡出切换动画
作用:让元素在淡入淡出动画切换
使用方式
$(Selector).fadeToggle(time,function)
修改opacity
作用: 修改opacity的值
使用方式
$(Selector).fadeTo(time,opacity,function)
显示动画
作用: 将Html结构显现出来
使用方式
$(Selector).show(time,function)
隐藏动画
作用: 将Html结构隐藏起来
使用方式
$(Selector).hide(time,function)
定义:停止正在执行的动画
使用方式:
$(selector).stop()
作用:执行一组CSS属性的自定义动画
使用方式:
$(selector).animate({CSS定义},time,function())
背景
滑入滑出动画
$(selector).slideDown(2000)
$(selector).slideDown()
$(selector).slideDown(fast/normal/slow)
$(selector).slideUp(2000)
$(selector).slideUp()
$(selector).slideUp(fast/normal/slow)
$(selector).slideToggle(2000)
$(selector).slideToggle()
$(selector).slideToggle(fast/normal/slow)
淡入淡出动画
$(selector).fadeIn(2000)
$(selector).fadeIn()
$(selector).fadeIn(fast/normal/slow)
$(selector).fadeOut(2000)
$(selector).fadeOut()
$(selector).fadeOut(fast/normal/slow)
$(selector).fadeToggle(2000)
$(selector).fadeToggle()
$(selector).fadeToggle(fast/normal/slow)
time可以是字符串,可以是具体数字
也可只有参数一、参数二
显示隐藏动画
$(selector).show(2000)
$(selector).show()
$(selector).show(fast/normal/slow)
$(selector).hide(2000)
$(selector).hide()
$(selector).hide(fast/normal/slow)
停止动画
stop()中可以有两个参数,参数一:后续动画是否执行,参数二:当前动画是否执行完毕,默认的是(false,false),注意第一个参数,true代表的是后续动画不执行
————————————————————————————
第一种:(false,false)
后续动画会执行,当前动画不会执行完
第二种:(false,true)
后续动画会执行,当前动画会执行完
第三种:(true,false)
后续动画不会执行,当前动画不会执行完
第四种:(true,true)
后续动画不会执行,当前动画会执行完
自定义动画
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
JavaScript
$("#select2").on("select2:open", function (e) { log("select2:open", e); });
$("#select2").on("select2:close", function (e) { log("select2:close", e); });
$("#select2").on("select2:select", function (e) { log("select2:select", e); });
$("#select2").on("select2:unselect", function (e) { log("select2:unselect", e); });
$("#select2").on("change", function (e) { log("change"); });
【select2的其他组件】
<div class="box1 div">
<p>多选下拉框</p>
<select id="sel_menu1" multiple="multiple" class="form-control">
<optgroup label="系统设置">
<option value="1">用户管理</option>
<option value="2">角色管理</option>
<option value="3">部门管理</option>
<option value="4">菜单管理</option>
</optgroup>
<optgroup label="订单管理">
<option value="5">订单查询</option>
<option value="6">订单导入</option>
<option value="7">订单删除</option>
<option value="8">订单撤销</option>
</optgroup>
<optgroup label="基础数据">
<option value="9">基础数据维护</option>
</optgroup>
</select>
</div>
JS代码
$("#sel_menu1").select2({[/align]
tags: true,
maximumSelectionLength: 3 //最多能够选择的个数
});
代码
Html代码
<div class="box2 div">
<p>图文结合的效果</p>
<select id="sel_menu2" class="js-example-templating js-states form-control">
<optgroup label="系统设置">
<option value="1">用户管理</option>
<option value="2">角色管理</option>
<option value="1">部门管理</option>
<option value="1">菜单管理</option>
</optgroup>
<optgroup label="订单管理">
<option value="1">订单查询</option>
<option value="1">订单导入</option>
<option value="1">订单删除</option>
<option value="1">订单撤销</option>
</optgroup>
<optgroup label="基础数据">
<option value="1">基础数据维护</option>
</optgroup>
</select>
</div>
JS代码
$("#sel_menu2").select2({
templateResult: formatState,
templateSelection: formatState
});
function formatState(state) {
if (!state.id) {
return state.text;
}
var $state = $('<span><img src="./image/' + state.element.value.toLowerCase() + '.png" class="img-flag" /> ' + state.text + '</span>'
);
return $state;
};
蓝蓝设计的小编 http://www.lanlanwork.com