[原创]茗洋AaronYang的 jquery.myselect.js 我的一次前端突破[上]
【评论,楼层数为30的倍数的,我送你我自己的博客园的皮肤,该博客参与活动】
介绍 myselect 自己原创的js插件这是一个可以可以支持ie6+的所有浏览器的,适应很多场景和需求的一个下拉自定义基于jquery的,轻量级的下拉控件,总大小不到11K,你可以很随意自己改改就可以应用到你的项目中。这里面的代码是我一行一行写的,希望多多支持哦
- 适合ie6+浏览器,易使用,代码易懂易学,代码已经优化,上下键,模糊匹配都不卡,反应灵敏,轻量级
- 支持模糊匹配,上下键选择,水印效果
- 自定义右侧图标
- 支持错误友好提示
- 支持级联选择,一个页面N个级联,也能正确的获得值
- 支持自定义可编辑和不可编辑,不可编辑,全框可单击,可编辑,小三角可单击,并支持文本框聚焦提示选择
- 支持一个页面批量下拉框,不会受影响下拉层不会互相重叠
- 支持从后台读取数据,然后模糊匹配
- 易拓展
基本使用之前
新建ASP.NET MVC 4 项目
因为新建后的项目可以立即使用jQuery了,所以我们的myselect.js中不会动态引入jquery
然后我们直接将jquery.myselect.js包放入Scripts下就可以了
因为这东西我们经常使用,所以我们把js的引用放到Views/shared/_Layout.cshtml页面上
mainstyle.css就是一个css通用标准库,如果你有了就不用引用了
删除底部
@Scripts.Render("~/bundles/jquery")
接下来,我添加了一个
接下来进入Gloabal.asax页面,F12这个
然后Home修改成MySelect
接下来,添加Myselect对应的Index视图
基本使用 DEMO1
@{
ViewBag.Title = "Index";
} <h2>Demo1</h2>
<input type="hidden" id="IdentityType" name="IdentityType" value="" />
<div class="select_box slw1">
<input id="cardId" type="text" value="请选择" readonly="true" hid="IdentityType" val='-1' />
<ul class="display">
<li value="1">身份证</li>
<li value="2">护照</li>
</ul>
</div>
<input type="button" value="获得值" id="demo1" style="display:inline"/> <script type="text/javascript">
MySelect({ Container: ".select_box", maxheight: 200});
$(function () {
$("#demo1").click(function () {
var demo1_val = $.ms.Get("#cardId");
alert("value="+demo1_val.id+",text="+demo1_val.text)
})
}
);
</script>
注意:div中的class样式由两部分组成,一个selectbox必须,第二个其实是宽度,样式调整。
还有selectbox样式的div中的结构必须是这样的。
讲一下这里的重点DIV那块
这里3部分组成
第一个input隐藏字段,也就是你往后台post的时候,那个对象的value值的地方,
第二个input字段是,就是你现在见到的那个文本框,小三角那个下拉是在jQuery.myselect.js中动态添加进去的
第三个ul就是点击,显示可选值的div
这里重点在于第二个input的 参数的配置和应对各种需求情况
效果图:
<input id="cardId" type="text" value="请选择" readonly="true" hid="IdentityType" val='-1' />
value就是默认的水印文本,val就是隐藏的值,hid就是hiddenId,就是隐藏input控件id,方便你选择完成,可以很方便的序列化传到后台Action的参数中,其实hid是个可选属性,不写,可以通过$.ms.Get(jquery的选择器),可以返回一个下拉框value和text的json,也可以获得值,这里的readonly=true的时候,文本框只可以单击,就可以选择值了,如果readonly属性不写就是可编辑了,我们去掉readonly属性
@{
ViewBag.Title = "Index";
} <h2>Demo1</h2>
不可编辑的
<input type="hidden" id="IdentityType" name="IdentityType" value="" />
<div class="select_box slw1">
<input id="cardId" type="text" value="请选择" readonly="true" hid="IdentityType" val='-1' />
<ul class="display">
<li value="1">身份证</li>
<li value="2">护照</li>
</ul>
</div>
<input type="button" value="获得值" id="demo1" style="display:inline"/>
<br />
可编辑的无水印,无提示下拉框
<input type="hidden" id="IdentityType2" name="IdentityType2" value="" />
<div class="select_box slw1" id="demo1_2">
<input id="cardId2" type="text" value="请选择" hid="IdentityType2" val='-1'/>
<ul class="display" id="ulcardId2">
<li value="1">身份证</li>
<li value="2">护照</li>
</ul>
</div>
<input type="button" value="获得值" id="demo2" style="display:inline"/> <script type="text/javascript">
MySelect({ Container: ".select_box", maxheight: 200, addnew: "新增...", animates: 2 });
$(function () {
$("#demo1").click(function () {
var demo1_val = $.ms.Get("#cardId");
alert("value="+demo1_val.id+",text="+demo1_val.text)
})
$("#demo2").click(function () {
var demo1_val = $.ms.Get("#cardId2");
alert("value=" + demo1_val.id + ",text=" + demo1_val.text)
})
}
);
</script>
效果图:不仅看到了可编辑,而且如果加了hid属性,就支持了额外的value值存的地方
接下来,我们加上auto=“on” 开启提示
我们加上ulid属性,然后在下面的ul上加上id,就可以支持上下键选择,完美滚动条,鼠标先选择,然后上下键还可以调整
加上hightext=“请选择” 开启水印文本效果。hightext的值是默认显示的value的值做对比的参照文本,所以最好和value一样,一样的话,鼠标选中,水印就会消失
源码:
可编辑的水印文本效果,有提示,支持上下键模糊匹配下拉框 <div class="select_box slw1" id="demo1_3">
<input id="floors" type="text" value="请选择楼层" hightext="请选择楼层" auto="on" val='-1' ulid="ulfloors"/>
<ul class="display" id="ulfloors">
<li value="1">我是一楼</li>
<li value="2">我是二楼</li>
<li value="3">我是三楼</li>
<li value="4">我是四楼</li>
<li value="5">我是五楼</li>
<li value="6">我是六楼</li>
<li value="7">我是七楼</li>
<li value="8">我是八楼</li>
<li value="9">我是九楼</li>
<li value="10">阿迷拖佛十楼来也</li>
</ul>
</div>
<input type="button" value="获得值" id="demo3" style="display:inline"/>
效果图
验证红框提示 DEMO2
代码当然很简单了
<br />
<input type="button" value="楼层验证失败提示" id="demo4" style="display:inline"/> <script type="text/javascript">
MySelect({ Container: ".select_box", maxheight: 200, addnew: "新增...", animates: 2 });
$(function () {
$("#demo1").click(function () {
var demo1_val = $.ms.Get("#cardId");
alert("value="+demo1_val.id+",text="+demo1_val.text)
})
$("#demo2").click(function () {
var demo1_val = $.ms.Get("#cardId2");
alert("value=" + demo1_val.id + ",text=" + demo1_val.text)
})
$("#demo3").click(function () {
var demo1_val = $.ms.Get("#floors");
alert("value=" + demo1_val.id + ",text=" + demo1_val.text)
})
$("#demo4").click(function () {
$.ms.Wrong("#floors");
}) }
);
</script>
效果图:
默认显示的值 DEMO3
场景:你传个id,获得了基本的值,然后下拉框要赋上原来的值
第一种方式:
demo5性别默认女性 <div class="select_box slw1" id="demo1_4">
<input id="sex" type="text" value="女" val='2'/>
<ul class="display">
<li value="1">男</li>
<li value="2">女</li>
<li value="2">保密</li> </ul>
</div>
<input type="button" value="获得值" id="demo5" style="display:inline"/>
效果我就不演示了,原理就是 value就是显示的值,val就是隐藏的值,我们调用Get方法获得值的时候也是依据这个
第二种方式:
使用我封装的Set方法,因为有时候我们需要清空表单,而不是页面一开始你就赋值好了,就是后期赋值,所以我就封装了这个方法,方便使用,就是设置值
$("#demo6").click(function () {
$.ms.Set("#sex","3","保密");
})
效果图
多个尺寸 DEMO4
你只要调整样式slw1,slw2,slw3等,满足不了的,你也可以具体的在myselect.css中扩展
css中的样式也很简单
@charset "utf-8";
.slw1,.slw2,.slw3{ margin-right:2px;_margin-right:0px;}
.slw1{ width:180px;}
.slw2{ width:85px;}
.slw3{ width:115px;}
.slw4{ width:80px;}
.slw5{ width:50px;}
.slw6{ width:65px;} .select_box { float:left; position:relative;}
.select_box .textbox{ border:1px solid #dedede;width:100%;height:28px;line-height:28px;background:#FFF}
.select_box .slt{cursor:pointer;width:22px;_width:19px;height:28px;line-height:28px;background:#FFF}
.select_box input{color:#888;height:26px;line-height:26px;border:0;display:block;width:60px;text-indent:8px;overflow:hidden;}
.select_box input:focus{outline:none}
.select_box .slt img{
position:relative;
top:44%;
_top:45%;
right:-5px;
} .select_box ul li{display:block;width:100%;text-indent:8px;overflow:hidden;}
.select_box li { padding:5px 0px; width:100%; line-height:1.5; color:#333;}
.select_box ul {width:100%; position:absolute; left:0; top:27px; border:1px solid #dedede;overflow: hidden;display:none; background:#fefefe; z-index:99999;}
.select_box ul li.hover {background:#999;color:#fff;} .it-on{ border:1px solid #4f9dff; color:#000;}
.it-wo{ border:1px solid #f00; color:#f00;}
it-wo就是验证失败的样式,加个红边框
我的现在的jquery.myselect.js已经能支持90%的场景了,也可以拓展成百度搜索条那种效
果,因为当初模仿它写的,现在支持两种展开方式,你可以在
MySelect({ Container: ".select_box", maxheight: 200, addnew: "新增...", animates: 2 });
后面的animate参数中指定1还是2,你可以体验下效果
这里的Container属性,后面是个jQuery选择器,你只要能正确定位到myselect结构的代码那里就行了,比如 #sex 或者 #moneyform div.selectbox[tag=1]都可以
关于动态赋值,你可以赋任何值,下拉框没有的都可以,这里我还没有对文本框中的和下拉框中的值进行验证,是否存在,所以提供了很大的方便性,这也是模仿百度的搜索设计做的,随便输。
这里我还没有篇幅讲解 级联查询,和后台查询绑定的使用,放心吧,我应经封装的很简单使用了。这里也看到了ulid这个属性,和ul加个id的设计,就是为了在一个场景中遇到很多级联,会遇到获值错误的问题。现发布一个给你们体验下。关于省市级联,我已经封装好了jquery.myselect.city.js中,具体使用下次说
为了解决级联和多个地方使用不会相互冲突,我先发个效果图给大家看
这就一个场景混合使用,也没有任何问题,
内容太多了,下次再讲了。自己写这个,也经过了好多次设计和修改,特意拿出来与大家分享一下。
jquery.myselect1.2.js包 下载 已经更新,兼容火狐了,刚才忘了东西
DEMO1 下载,请替换以前的myselect包,使用1.2的
写到我这个年龄,我觉的我的时间很多都花在研究上了,所以现在很少能有时间写写博客,干自己爱干的事,这次能写到这里也让我感到很高兴,谢谢你们也看到了这里,我会慢慢写的,谢谢你们的支持.
我不知道我写个是不是个多余,我不是做前端的,但我的前端也不差,我在合肥,刚刚离职,准备创业,所以现在时间比较多吧..
========================================AaronYang.cnblogs.com 茗洋博客==================================================
[原创]茗洋AaronYang的 jquery.myselect.js 我的一次前端突破[上]的更多相关文章
- Jquery ajaxfileupload.js结合.ashx文件实现无刷新上传
先上几张图更直观展示一下要实现的功能,本功能主要通过Jquery ajaxfileupload.js插件结合ajaxUpFile.ashx一般应用程序处理文件实现Ajax无刷新上传功能,结合NPOI2 ...
- jquery.page.js插件在使用时重复触发“上一页”和“下一页”操作
jquery.page.js使用demo HTML代码 <div class="result"> <div class="tcdPageCode&quo ...
- 分页-jquery.page.js插件在使用时重复触发“上一页”和“下一页”操作
HTML代码 <!-- <div class="zxf_pagediv" id="Pagination" style="display:b ...
- 茗洋Easy UI 1.3.5 部分问题解决系列专题[自定义alert关闭时间,自动关]
[评论,楼层数为30的倍数的,我送你我自己的博客园的皮肤,该博客参与活动] 这次我又给大家带来的EasyUI的我研究拓展的新特性 我使用的是 EasyUI 1.3.5版本的,项目是ASP.NET M ...
- 茗洋Easy UI 1.3.2 部分问题解决系列专题[Combo模糊匹配中文问题 修复]
本次给大家带来的EasyUI的我研究拓展的新特性 我使用的是 EasyUI 1.3.2版本的,项目是ASP.NET MVC3,但是本篇讲解用不上ASP.NET MVC,仅仅修改官方Demo你就知道怎 ...
- jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
描述: jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生成二维条码.此插件是能够独立使用的,体积也比较 ...
- 转载 jQuery和js自定义函数和文件的方法(全网最全)
jQuery和js自定义函数和文件的方法(全网最全) 版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...
- 一个简单的页面弹窗插件 jquery.pageMsgFrame.js
页面弹窗是网站中常用的交互效果,它可以强提示网站的某些信息给用户,或者作用于某些信息的修改等等功能. 这几天在做一个项目的时候,就顺捎把这个插件写一下,栽棵树,自己乘凉吧. 原创博文,转载请注明出处: ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
随机推荐
- [CQOI2015]任务查询系统(未完成)
链接:https://www.luogu.org/problemnew/show/P3168 题意:有n个任务,在si-ti发生,有优先级pi,求x时刻前k个pi之和 n,si,ti<=1000 ...
- asp.net core服务的生命周期
Transient:每一次GetService都会创建一个新的实例 Scoped:在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http requ ...
- HDU3306 Another kind of Fibonacci 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU3306 题意概括 A0=1,A1=1,AN=X*AN-1+Y*AN-2(N>=2).求SN,SN ...
- win10 更新之后,无法开启wifi,“组或资源的状态不是执行请求操作的正确状态”
netsh wlan netsh wlan start hostednetwork 请参考最新博客:http://www.cnblogs.com/tanrong/p/8184325.html 已尝试解 ...
- python的os模块总结
python的os模块总结 目录 常用方法和属性总结 文件操作 目录操作 常用方法和属性总结 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir(&quo ...
- 004.Kickstart部署之FTP架构
一 准备 1.1 完整架构:Kickstart+DHCP+VSFTP+TFTP+PXE 1.2 组件应用 Kickstart服务端IP:172.24.8.12 DHCP:提供客户端IP,网关,镜像路径 ...
- angular中使用代理
使用代理 1.在跟目录创建proxy.config.json文件 { "/api": { "target": "http://localhost:30 ...
- 查找最大或最小的 N 个元素
使用内置的heapd模块 In [1]: import heapq In [2]: nums = [1,8, 2, 23, 7, -4, 18, 23, 42, 37, 2] In [3]: prin ...
- BZOJ.2879.[NOI2012]美食节(费用流SPFA)
题目链接 /* 同"修车":对于每个厨师拆成p个点表示p个时间点,每个人向m个厨师每个时间点连边 这样边数O(nmp)+网络流 ≈O(nm*p^2)(假设SPFA线性) = GG ...
- [BZOJ2639]矩形计算
[BZOJ2639]矩形计算 题目大意: 给定一个\(n\times m(n,m\le200)\)的矩阵.\(q(q\le10^5)\)次询问,每次询问一个子矩阵中所有数字出现次数的平方和. 思路: ...