Js日期选择自动填充到输入框(界面漂亮兼容火狐)


Posted in Javascript onAugust 02, 2013
<html> 
<head> 
<title>很漂亮、兼容火狐的Js日期选择,自动填充到输入框</title> 
<meta http-equiv="content-Type" content="text/html;charset=gb2312"> 
<style type="text/css"> 
body{font-size:12px;font-family:Verdana,Arial,"宋体";} 
a:link {color:#464646;text-decoration:none;} 
a:visited {color:#464646;text-decoration:none;} 
a:hover{color:#ed145b;text-decoration:underline;} 
a:active{color:#ed145b;text-decoration:underline;} 
td{font-size:12px} 
/*/*/ 
/*DateCSS样式*/ 
.header {font: 12px Arial, Tahoma !important;font-weight: bold !important;font: 11px Arial, Tahoma;font-weight: bold;color: #154BA0;background:#C2DEED;height: 25px;padding-left: 10px; 
} 
.header td {padding-left: 10px;} 
.header a {color: #154BA0;} 
.header input {background:none;vertical-align: middle;height: 16px;} 
.category {font: 12px Arial, Tahoma !important;font: 11px Arial, Tahoma;color: #92A05A;height:20px;background-color: #FFFFD9;} 
.category td {border-bottom: 1px solid #DEDEB8;} 
.expire, .expire a:link, .expire a:visited {color: #999999;} 
.default, .default a:link, .default a:visited {color: #000000;} 
.checked, .checked a:link, .checked a:visited {color: #FF0000;} 
.today, .today a:link, .today a:visited {color: #00BB00;} 
#calendar_year {display: none;line-height: 130%;background: #FFFFFF;position: absolute;z-index: 10;} 
#calendar_year .col {float: left;background: #FFFFFF;margin-left: 1px;border: 1px solid #86B9D6;padding: 4px;} 
#calendar_month {display: none;background: #FFFFFF;line-height: 130%;border: 1px solid #86B9D6;padding: 4px;position: absolute;z-index: 11;} 
.tableborder {background: white;border: 1px solid #86B9D6;} 
#year,#month{padding-right:10px;} 
</style> 
<script language="javascript"> 
//下面的代码段如果你页面里有,可以去掉 
var ie =navigator.appName=="Microsoft Internet Explorer"?true:false; 
function $(objID){ 
return document.getElementById(objID); 
} 
</script> 
</head> 
<body> <script type="text/javascript"> 
var controlid = null; 
var currdate = null; 
var startdate = null; 
var enddate = null; 
var yy = null; 
var mm = null; 
var hh = null; 
var ii = null; 
var currday = null; 
var addtime = false; 
var today = new Date(); 
var lastcheckedyear = false; 
var lastcheckedmonth = false; 
function _cancelBubble(event) { 
e = event ? event : window.event ; 
if(ie) { 
e.cancelBubble = true; 
} else { 
e.stopPropagation(); 
} 
} 
function getposition(obj) { 
var r = new Array(); 
r['x'] = obj.offsetLeft; 
r['y'] = obj.offsetTop; 
while(obj = obj.offsetParent) { 
r['x'] += obj.offsetLeft; 
r['y'] += obj.offsetTop; 
} 
return r; 
} 
function loadcalendar() { 
s = ''; 
s += '<div id="calendar" style="display:none; position:absolute; z-index:9;" onclick="_cancelBubble(event)">'; 
if (ie) 
{ 
s += '<iframe width="200" height="160" src="about:blank" style="position: absolute;z-index:-1;"></iframe>'; 
} 
s += '<div style="width: 200px;"><table class="tableborder" cellspacing="0" cellpadding="0" width="100%" style="text-align: center">'; 
/// 
s += '<tr align="center" class="header"><td class="header"><a href="#" onclick="refreshcalendar(yy, mm-1);return false" title="上一月"><<</a></td><td colspan="5" style="text-align: center" class="header"><a href="#" onclick="showdiv(\'year\');_cancelBubble(event);return false" title="点击选择年份" id="year"></a> - <a id="month" title="点击选择月份" href="#" onclick="showdiv(\'month\');_cancelBubble(event);return false"></a></td><td class="header"><A href="#" onclick="refreshcalendar(yy, mm+1);return false" title="下一月">>></A></td></tr>'; 
s += '<tr class="category"><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>'; 
for(var i = 0; i < 6; i++) { 
s += '<tr class="altbg2">'; 
for(var j = 1; j <= 7; j++) 
s += "<td id=d" + (i * 7 + j) + " height=\"19\">0</td>"; 
s += "</tr>"; 
} 
s += '<tr id="hourminute"><td colspan="7" align="center"><input type="text" size="1" value="" id="hour" onKeyUp=\'this.value=this.value > 23 ? 23 : zerofill(this.value);controlid.value=controlid.value.replace(/\\d+(\:\\d+)/ig, this.value+"$1")\'> 点 <input type="text" size="1" value="" id="minute" onKeyUp=\'this.value=this.value > 59 ? 59 : zerofill(this.value);controlid.value=controlid.value.replace(/(\\d+\:)\\d+/ig, "$1"+this.value)\'> 分</td></tr>'; 
s += '</table></div></div>';/// 
s += '<div id="calendar_year" onclick="_cancelBubble(event)"><div class="col">'; 
for(var k = 1930; k <= 2019; k++) { 
s += k != 1930 && k % 10 == 0 ? '</div><div class="col">' : ''; 
s += '<a href="#" onclick="refreshcalendar(' + k + ', mm);$(\'calendar_year\').style.display=\'none\';return false"><span' + (today.getFullYear() == k ? ' class="today"' : '') + ' id="calendar_year_' + k + '">' + k + '</span></a><br />'; 
} 
s += '</div></div>'; 
s += '<div id="calendar_month" onclick="_cancelBubble(event)">'; 
for(var k = 1; k <= 12; k++) { 
s += '<a href="#" onclick="refreshcalendar(yy, ' + (k - 1) + ');$(\'calendar_month\').style.display=\'none\';return false"><span' + (today.getMonth()+1 == k ? ' class="today"' : '') + ' id="calendar_month_' + k + '">' + k + ( k < 10 ? ' ' : '') + ' 月</span></a><br />'; 
} 
s += '</div>'; 
var nElement = document.createElement("div"); 
nElement.innerHTML=s; 
document.getElementsByTagName("body")[0].appendChild(nElement); 
//document.write(s); 
document.onclick = function(event) { 
$('calendar').style.display = 'none'; 
$('calendar_year').style.display = 'none'; 
$('calendar_month').style.display = 'none'; 
} 
$('calendar').onclick = function(event) { 
_cancelBubble(event); 
$('calendar_year').style.display = 'none'; 
$('calendar_month').style.display = 'none'; 
} 
} 
function parsedate(s) { 
/(\d+)\-(\d+)\-(\d+)\s*(\d*):?(\d*)/.exec(s); 
var m1 = (RegExp.$1 && RegExp.$1 > 1899 && RegExp.$1 < 2101) ? parseFloat(RegExp.$1) : today.getFullYear(); 
var m2 = (RegExp.$2 && (RegExp.$2 > 0 && RegExp.$2 < 13)) ? parseFloat(RegExp.$2) : today.getMonth() + 1; 
var m3 = (RegExp.$3 && (RegExp.$3 > 0 && RegExp.$3 < 32)) ? parseFloat(RegExp.$3) : today.getDate(); 
var m4 = (RegExp.$4 && (RegExp.$4 > -1 && RegExp.$4 < 24)) ? parseFloat(RegExp.$4) : 0; 
var m5 = (RegExp.$5 && (RegExp.$5 > -1 && RegExp.$5 < 60)) ? parseFloat(RegExp.$5) : 0; 
/(\d+)\-(\d+)\-(\d+)\s*(\d*):?(\d*)/.exec("0000-00-00 00\:00"); 
return new Date(m1, m2 - 1, m3, m4, m5); 
} 
function settime(d) { 
$('calendar').style.display = 'none'; 
controlid.value = yy + "-" + zerofill(mm + 1) + "-" + zerofill(d) + (addtime ? ' ' + zerofill($('hour').value) + ':' + zerofill($('minute').value) : ''); 
} 
function showcalendar(event, controlid1, addtime1, startdate1, enddate1) { 
controlid = controlid1; 
addtime = addtime1; 
startdate = startdate1 ? parsedate(startdate1) : false; 
enddate = enddate1 ? parsedate(enddate1) : false; 
currday = controlid.value ? parsedate(controlid.value) : today; 
hh = currday.getHours(); 
ii = currday.getMinutes(); 
var p = getposition(controlid); 
$('calendar').style.display = 'block'; 
$('calendar').style.left = p['x']+'px'; 
$('calendar').style.top = (p['y'] + 20)+'px'; 
_cancelBubble(event); 
refreshcalendar(currday.getFullYear(), currday.getMonth()); 
if(lastcheckedyear != false) { 
$('calendar_year_' + lastcheckedyear).className = 'default'; 
$('calendar_year_' + today.getFullYear()).className = 'today'; 
} 
if(lastcheckedmonth != false) { 
$('calendar_month_' + lastcheckedmonth).className = 'default'; 
$('calendar_month_' + (today.getMonth() + 1)).className = 'today'; 
} 
$('calendar_year_' + currday.getFullYear()).className = 'checked'; 
$('calendar_month_' + (currday.getMonth() + 1)).className = 'checked'; 
$('hourminute').style.display = addtime ? '' : 'none'; 
lastcheckedyear = currday.getFullYear(); 
lastcheckedmonth = currday.getMonth() + 1; 
} 
function refreshcalendar(y, m) { 
var x = new Date(y, m, 1); 
var mv = x.getDay(); 
var d = x.getDate(); 
var dd = null; 
yy = x.getFullYear(); 
mm = x.getMonth(); 
$("year").innerHTML = yy; 
$("month").innerHTML = mm + 1 > 9 ? (mm + 1) : '0' + (mm + 1); 
for(var i = 1; i <= mv; i++) { 
dd = $("d" + i); 
dd.innerHTML = " "; 
dd.className = ""; 
} 
while(x.getMonth() == mm) { 
dd = $("d" + (d + mv)); 
dd.innerHTML = '<a href="###" onclick="settime(' + d + ');return false">' + d + '</a>'; 
if(x.getTime() < today.getTime() || (enddate && x.getTime() > enddate.getTime()) || (startdate && x.getTime() < startdate.getTime())) { 
dd.className = 'expire'; 
} else { 
dd.className = 'default'; 
} 
if(x.getFullYear() == today.getFullYear() && x.getMonth() == today.getMonth() && x.getDate() == today.getDate()) { 
dd.className = 'today'; 
dd.firstChild.title = '今天'; 
} 
if(x.getFullYear() == currday.getFullYear() && x.getMonth() == currday.getMonth() && x.getDate() == currday.getDate()) { 
dd.className = 'checked'; 
} 
x.setDate(++d); 
} 
while(d + mv <= 42) { 
dd = $("d" + (d + mv)); 
dd.innerHTML = " "; 
d++; 
} 
if(addtime) { 
$('hour').value = zerofill(hh); 
$('minute').value = zerofill(ii); 
} 
} 
function showdiv(id) { 
var p = getposition($(id)); 
$('calendar_' + id).style.left = p['x']+'px'; 
$('calendar_' + id).style.top = (p['y'] + 16)+'px'; 
$('calendar_' + id).style.display = 'block'; 
} 
function zerofill(s) { 
var s = parseFloat(s.toString().replace(/(^[\s0]+)|(\s+$)/g, '')); 
s = isNaN(s) ? 0 : s; 
return (s < 10 ? '0' : '') + s.toString(); 
} 
loadcalendar(); 
</script> 
用法演示:<br>请选择日期:<input name="member.birth" type="text" value="2008-5-19" size="14" readonly onclick="showcalendar(event,this);" onfocus="showcalendar(event, this);if(this.value=='0000-00-00')this.value=''"> 
</body> 
</html>
Javascript 相关文章推荐
网页打开自动最大化的js代码
Aug 22 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
jQuery实用技巧必备(上)
Nov 02 Javascript
vuejs动态组件给子组件传递数据的方法详解
Sep 09 Javascript
JS前端笔试题分析
Dec 19 Javascript
Vue 滚动行为的具体使用方法
Sep 13 Javascript
three.js中文文档学习之通过模块导入
Nov 20 Javascript
详解小程序缓存插件(mrc)
Aug 17 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
js中arguments对象的深入理解
May 14 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
Sep 05 Javascript
Vue 3.0中jsx语法的使用
Nov 13 Javascript
JS日期和时间选择控件升级版(自写)
Aug 02 #Javascript
Js日期选择器并自动加入到输入框中示例代码
Aug 02 #Javascript
js动态给table添加/删除tr的方法
Aug 02 #Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 #Javascript
JavaScript获取/更改文本框的值的实例代码
Aug 02 #Javascript
JS限制Textarea文本域字符个数的具体实现
Aug 02 #Javascript
javascript自动改变文字大小和颜色的效果的小例子
Aug 02 #Javascript
You might like
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
Python break语句详解
2014/03/11 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
先进事迹报告会主持词
2014/04/02 职场文书
学校安全生产承诺书
2014/05/23 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
校园广播稿精选
2014/10/01 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
英文道歉信
2015/01/20 职场文书
教师工作能力自我评价
2015/03/04 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android