html+javascript+bootstrap实现层级多选框全层全选和多选功能
想做一个先按层级排序并可以多选的功能,首先倾向于用多层标签式的,直接选定加在文本域里, 查到这文,非常详细,如果大家需要做前面所说的功能,可以参考这个地址,http://mrthink.net/jquery-plugin-iselecttags/
但是,考虑到如果要做一个选项数不确定、可能非常多,用标签会容易视觉疲劳,同时要求随着选项数的变化,最小程度影响网页布局和效果,于是选择用层级的多选框,也就是设置电脑的那种常见效果。第二层选项可以折叠/展开到第一层下面,用bootstrap的 data-toggle="collapse" data-target="#demo1"
进行关联第二层折叠效果。
具体代码如下:
|
用Html实现人人网注册界面 ,Js实现生日栏表单三级联动
1. 效果
2.Html代码部分
代码如下 | 复制代码 |
<!DOCTYPE html> <html> <headlang="en"> <metacharset="UTF-8"> <title>人人网日期表单联动</title> <style> select { font:20px/40px '宋体'; } option {width: 100px;} </style> </head> <body> <formmethod="get"onchange="changeMonth()"> <b><h3align="center"> 免费开通人人网账号
</h3></b>
<tablealign="center"height="500">
<tr><td>注册邮箱: </td><td> <inputtype="text"name="name"/></td></tr> <tr><td> </td><td>你还可以使用 <ahref="https://www.baidu.com">账号</a> 注册或者 <ahref="https://www.baidu.com">手机号</a> 注册</td></tr>
<tr><td>创建密码: </td><td><inputtype="password"name="password"/></td></tr>
<tr><td>真实姓名: </td><td><inputtype="password"name="name"/></td>
<tr><tdalign="right">性别: </td><td>男<inputtype="radio"value="male"name="gender"/> 女<inputtype="radio"value="female"name="gender"/></td></tr>
<tr><tdalign="right">生日: </td><td>
<divid="box"> <selectname="sel1"id="sel1"> <optionvalue="year">年</option> </select> <selectname="sel2"id="sel2"> <optionvalue="month">月</option> </select> <selectname="sel3"id="sel3"> <optionvalue="day">日</option> </select> <spanid="result"></span> </div></td></tr>
<tr><tdalign="right">我现在: </td> <td><selectname="subject"> <optionvalue="xu">正在上学</option> <optionvalue="cz">工作</option> <optionvalue="gz">赋闲</option> <optionvalue="bk">经商</option> </select></td></tr>
<tr><td></td><td>![](verycode.gif) <ahref="https://www.baidu.com">看不清换一张?</a> </td></tr> <tr><td>验证码:</td><td><inputtype="password"name="yanzheng"/></td></tr> <tr><td></td><td><ahref="https://www.baidu.com"> ![](btn_reg.gif)</a></td></tr> </table> </form> </body> </html> |
3.JavaScript代码
代码如下 | 复制代码 |
<script> //生成日期 functioncreatDate() { //生成1900年-2100年 for(vari = 2016; i >= 1950; i--) { //创建select项 varoption = document.createElement('option'); option.setAttribute('value',i); option.innerHTML = i; sel1.appendChild(option); } //生成1月-12月 for(vari = 1; i <=12; i++){ varoption1 = document.createElement('option'); option1.setAttribute('value',i); option1.innerHTML = i; sel2.appendChild(option1); } //生成1日—31日 for(vari = 1; i <=31; i++){ varoption2 = document.createElement('option'); option2.setAttribute('value',i); option2.innerHTML = i; sel3.appendChild(option2); } } creatDate(); //保存某年某月的天数 vardays;
//年份点击 绑定函数 sel1.onclick =function() { //月份显示默认值 sel2.options[0].selected =true; //天数显示默认值 sel3.options[0].selected =true; } //月份点击 绑定函数 sel2.onclick =function() { //天数显示默认值 sel3.options[0].selected =true; //计算天数的显示范围 //如果是2月 if(sel2.value == 2) { //判断闰年 if((sel1.value % 4 === 0 && sel1.value % 100 !== 0) || sel1.value % 400 === 0) { days = 29; } else { days = 28; } //判断小月 }elseif(sel2.value == 4 || sel2.value == 6 ||sel2.value == 9 ||sel2.value == 11){ days = 30; }else{ days = 31; }
//增加或删除天数 //如果是28天,则删除29、30、31天(即使他们不存在也不报错) if(days == 28){ sel3.remove(31); sel3.remove(30); sel3.remove(29); } //如果是29天 if(days == 29){ sel3.remove(31); sel3.remove(30); //如果第29天不存在,则添加第29天 if(!sel3.options[29]){ sel3.add(newOption('29','29'),null) } } //如果是30天 if(days == 30){ sel3.remove(31); //如果第29天不存在,则添加第29天 if(!sel3.options[29]){ sel3.add(newOption('29','29'),null) } //如果第30天不存在,则添加第30天 if(!sel3.options[30]){ sel3.add(newOption('30','30'),null) } } //如果是31天 if(days == 31){ //如果第29天不存在,则添加第29天 if(!sel3.options[29]) { sel3.add(newOption('29','29'),null) } //如果第30天不存在,则添加第30天 if(!sel3.options[30]) { sel3.add(newOption('30','30'),null) } //如果第31天不存在,则添加第31天 if(!sel3.options[31]) { sel3.add(newOption('31','31'),null) } } }
//结果显示 设置好日期时间后 弹窗通知 box.onclick =function() { //当年、月、日都已经为设置值时 if(sel1.value !='year'&& sel2.value !='month'&& sel3.value !='day') { alert("日期时间已经设定好"); } }
</script> |
本文介绍了使用spring拦截器实现日志管理实例的教程,非常实用,有兴趣的同学可以参考一下本文
使用HandlerInterceptor拦截器,可以拦截请求,实现通用的日志管理操作
一、添加拦截器类
在"src/main/java"代码文件夹的"org.xs.demo1"的包下新建"LogInterceptor.java"类:
代码如下 | 复制代码 |
packageorg.xs.demo1;
importjava.text.SimpleDateFormat;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.core.NamedThreadLocal;
importorg.springframework.web.servlet.HandlerInterceptor;
importorg.springframework.web.servlet.ModelAndView;
/**
* 日志拦截器
* @author ThinkGem
*/
publicclassLogInterceptorimplementsHandlerInterceptor { privatefinalLogger log = LoggerFactory.getLogger(getClass().getName());
privatestaticfinalThreadLocal<Long> startTimeThreadLocal =newNamedThreadLocal<Long>("ThreadLocal StartTime"); /**
* 预处理
*/
@Override
publicbooleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throwsException {
longbeginTime = System.currentTimeMillis();//开始时间
startTimeThreadLocal.set(beginTime);//线程绑定变量(该数据只有当前请求的线程可见)
log.info("开始计时: {}",newSimpleDateFormat("hh:mm:ss.SSS").format(beginTime));
returntrue;
}
/**
* 返回处理
*/
@Override
publicvoidpostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throwsException {
if(modelAndView !=null){
log.info("ViewName: "+ modelAndView.getViewName());
}
}
/**
* 后处理
*/
@Override
publicvoidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throwsException {
// 保存日志
//LogUtils.saveLog(request, handler, ex, null);
// 输出日志信息
log.info("访问地址:"+ request.getRequestURI() +",执行方式:"+ request.getMethod());
longbeginTime = startTimeThreadLocal.get();//得到线程绑定的局部变量(开始时间)
longendTime = System.currentTimeMillis();//结束时间
log.info("计时结束:{}",newSimpleDateFormat("hh:mm:ss.SSS").format(endTime));
} } |
二、修改配置文件
修改spring-mvc.xml件,加入:
代码如下 | 复制代码 |
<!-- 拦截器配置 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mappingpath="/**"/>
<beanclass="org.xs.demo1.LogInterceptor"/>
</mvc:interceptor>
</mvc:interceptors> |
三、运行测试
访问"http://localhost:8080/demo1/hello/list2"地址
可以看到拦截器中输出的日志信息了
本文介绍了比较常用的几个正则表达式匹配数字,非常实用,有需要的同学可以参考一下正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\s*?)[^>]*>.*?|<.*?>
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 这篇文章主要介绍了Bootstrap Table使用整理(二)的相关资料,需要的朋友可以参考下...2017-06-15
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
- 复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
- 有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
- 首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
- 在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
- 事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
- 1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
- Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
这篇文章主要介绍了基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍 的相关资料,需要的朋友可以参考下...2016-05-14- 这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
- 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
- 虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24
- 神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
- tab切换在网页中很常见,故最近总结了4种实现方法。 首先,写出tab的框架,加上最简单的样式,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style> *{ pa...2015-11-08
- ---恢复内容开始---1.location.href.....(1)self.loction.href="http://www.cnblogs.com/url" window.location.href="http://www.cnblogs.com/url" 以上两个用法相同均为在当前页面打开URL页面 (2)this.locati...2015-10-30
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
前言在面向对象的编程范式中,封装都是必不可少的一个概念,而在诸如 Java,C++等传统的面向对象的语言中, 私有成员是实现封装的一个重要途径。但在 JavaScript 中,确没有在语法特性上对私有成员提供支持, 这也使得开发人员使...2015-10-30javascript中slice(),splice(),split(),substring(),substr()使用方法
1.slice();Array和String对象都有在Array中 slice(i,[j])i为开始截取的索引值,负数代表从末尾算起的索引值,-1为倒数第一个元素 j为结束的索引值,缺省时则获取从i到末尾的所有元素参数返回: 返回索引值从i到j的数组,原数组...2015-03-15