首页 > 其他 > 详细

联动日历

时间:2015-05-02 23:11:37      阅读:247      评论:0      收藏:0      [点我收藏+]

技术分享

联动日历: html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>1</title>
<meta name="author" content="Administrator" />
<script src="rili.js"></script>
<!-- Date: 2015-05-02 -->
<style>
*{ margin:0; padding:0; font-size:12px;}
input{border:1px solid #4a4a4a;}
#div1{ margin:20px; position:absolute; top:25px; left:10px; display:none;}
#nowTime{ width:330px; float:left;}
#nextTime { width:330px; float:left; margin:0 0 0 10px;}
.title{ width:100%; height:30px; background:#17a4eb; color:#FFFFFF; position:relative;}
.title .c{ text-align:center; line-height:30px;}
.title .l{ position:absolute; top:6px; left:5px;}
.title .r{ position:absolute; top:6px; right:5px;}
table{ width:100%; background:#dee3e9; color:#9ea7ac;}
table tr{ background:#f9fafc;}
table th{ width:46px; padding:5px;}
table td{ padding:5px; text-align:center;}
.red{ color:#FF0000;}
.blue{ color:#0000FF;}
table td p{ color:#FF0000;}

input{ margin:20px;}
</style>
<script src="rili.js"></script>
<script src="ajax.js"></script>
 
</head>
<body>
<input type="text" />
<input type="text" />
<input type="button" value="确定" />
<div id="div1">
    <div id="nowTime"></div>
    <div id="nextTime"></div>
</div>
</body>
</html>

 data.js

// JavaScript Document

{
	code : 1,
	list : [1,6,8,,,,124,77,8,999,11,,,,,666,111,5,5,5,,666,111,5,5,5]
}

ajax.js

function ajax(url, fnOnSucc, fnOnFaild)
{
	var oAjax=null;
	
	//1.初始化Ajax对象
	if(window.ActiveXObject)
	{
		oAjax=new ActiveXObject("Msxml2.XMLHTTP")||new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		oAjax=new XMLHttpRequest();
	}
	
	//2.建立连接
	oAjax.open(‘get‘, url, true);
	
	//3.监控请求状态
	oAjax.onreadystatechange=function ()
	{
		//readyState->Ajax对象内部的状态
		//status->服务器返回的请求结果
		if(oAjax.readyState==4)
		{
			//alert(‘请求完成,请求结果是:‘+oAjax.status);
			//alert(oAjax.responseText);
			if(oAjax.status==200)
			{
				if(fnOnSucc)
				{
					fnOnSucc(oAjax.responseText);
				}
			}
			else
			{
				if(fnOnFaild)
				{
					fnOnFaild(oAjax.status);
				}
			}
		}
		//alert(oAjax.readyState);
		//alert(typeof oAjax.status);
	};
	
	//4.发送请求
	oAjax.send();
	
	//5.*清理
	//oAjax.onreadystatechange=null;
	//oAjax=null;
}

function ajaxPost(url, sData, fnOnSucc, fnOnFaild)
{
	var oAjax=null;
	
	//1.初始化Ajax对象
	if(window.ActiveXObject)
	{
		oAjax=new ActiveXObject("Msxml2.XMLHTTP")||new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		oAjax=new XMLHttpRequest();
	}
	
	//2.建立连接
	oAjax.open(‘post‘, url, true);
	
	//3.监控请求状态
	oAjax.onreadystatechange=function ()
	{
		//readyState->Ajax对象内部的状态
		//status->服务器返回的请求结果
		if(oAjax.readyState==4)
		{
			//alert(‘请求完成,请求结果是:‘+oAjax.status);
			//alert(oAjax.responseText);
			if(oAjax.status==200)
			{
				if(fnOnSucc)
				{
					fnOnSucc(oAjax.responseText);
				}
			}
			else
			{
				if(fnOnFaild)
				{
					fnOnFaild(oAjax.status);
				}
			}
		}
		//alert(oAjax.readyState);
		//alert(typeof oAjax.status);
	};
	
	//4.发送请求
	oAjax.setRequestHeader(‘content-type‘, ‘urlencode‘);
	oAjax.send(sData);
	
}

rili.js

/**
 * @author Administrator
 */
window.onload=function(){
	/*获取三个Input*/
	var aInput = document.getElementsByTagName(‘input‘);
	var oDiv = document.getElementById(‘div1‘);
	var oNowTime = document.getElementById(‘nowTime‘);
	var oNextTime = document.getElementById(‘nextTime‘);
	var aTd = document.getElementsByTagName(‘td‘);
	var aNowSpan = oNowTime.getElementsByTagName(‘span‘);
	var aNextSpan = oNextTime.getElementsByTagName(‘span‘);
	var bBtn = true;
	
	aInput[2].onclick = function(){
		var oDate = new Date();
		
		if( bBtn ){
				oDiv.style.display = ‘block‘;
				/*如果最后一个月是12月 下个月为第二年的1月*/
				if(oDate.getMonth()+1==12 ){
					    showDate(oNowTime,oDate.getFullYear(),oDate.getMonth()+1,true);
					    showDate(oNextTime,oDate.getFullYear()+1,1);
				}else{
						showDate(oNowTime,oDate.getFullYear(),oDate.getMonth()+1,true);//true 代表是生成在坐标还是生成在右边  不带true代表下个月
						showDate(oNextTime,oDate.getFullYear(),oDate.getMonth()+2);
				}
				
			showColor(oDate.getDate());	
			showBtn();//左右按钮可点击
			showClick();//点击td后 当前 日期 金额填入输入框
			hideLastTr()
		}else{
			oDiv.style.display = ‘none‘
		}
		bBtn = !bBtn;
	}
	
	/*showDate*/
	function showDate(obj , year, month,bBtn ){
		
		var oDate = new Date();
		var dayNum = 0;
		
		/*obj代表当前div  和 下个月div    点击确定按钮的时候 只生成一次日历  当obj.bBtn不存在的时候生成*/
		if(!obj.bBtn){
			obj.oTitle = document.createElement(‘div‘);
			obj.oTitle.className = "title";
			obj.appendChild(obj.oTitle);
		
			/*添加tHead*/
			var oTable = document.createElement(‘table‘);
			var oThead = document.createElement(‘tHead‘); //ie下table的innerHTML会报错
			var oTr = document.createElement(‘tr‘);
			var arr=[‘周一‘,‘周二‘,‘周三‘,‘周四‘,‘周五‘,‘周六‘,‘周日‘];
			for( var i = 0; i<7;i++ ){
				var oTh = document.createElement(‘th‘);
				oTh.innerHTML = arr[i];
				if(i==5 || i==6) oTh.className="red";
				oTr.appendChild(oTh);
			}
			oThead.appendChild(oTr);
			oTable.appendChild(oThead);
			
			/*添加日期 tbody*/
			var oTbody = document.createElement(‘tBody‘);
			/*最多6行*/
			for(var i=0;i<6;i++){
				var oTr = document.createElement(‘tr‘);
				/*每行7列*/
				for( var j=0;j<7;j++ ){
					var oTd = document.createElement(‘td‘);
					oTr.appendChild(oTd)
				}
				oTbody.appendChild(oTr)
			}
			
			oTable.appendChild(oTbody);
			obj.appendChild(oTable);
			
			obj.bBtn = true;
		}	
		/*给obj.oTitle加内容*/
		var classLR = null , monthLR = null ;
		//当bBtn存在的时候, 就是往oNowTime里加日期 左侧的月份为传进去的月份减1
	    if( bBtn ){
	    	classLR = ‘l‘;
	    	monthLR = month-1;
	    }else{ //当bBtn不存在的时候, 就是往oNextTime里加日期右侧的月份为传进去的月份加1
	    	classLR = ‘r‘;
	    	monthLR = month+1;
	    }

		obj.oTitle.innerHTML = ‘<div class="‘+classLR+‘"><span>‘+monthLR+‘</span>月</div><div class="c"><span>‘+year+‘</span>年<span>‘+month+‘</span>月</div>‘	
		
		/**每次点击的时候  让所有td的内容为空**/
		var aTd = obj.getElementsByTagName(‘td‘);//注意这里是obj获取所有的td 不是document
		for( var i=0;i < aTd.length ; i++ ){
			aTd[i].innerHTML=‘‘
		}
		
		/*判断天数   闰年2月29天 闰年 能被4整除 但不能被100整除  或者能被400整除*/
		
		
		if( month ==1 || month ==3 || month ==5|| month ==7|| month ==8|| month ==10|| month ==12){
			dayNum = 31
		}else if( month ==4 || month ==6 || month ==9|| month ==11  ){
			dayNum = 30
		}else if( month ==2 && isLeapYear(year) ){
			dayNum = 28
		}else{
			dayNum = 29
		}
		
		/*设置日期   找当月的第一天 对应周几  找到1号在哪个td 后面的顺延*/
		oDate.setFullYear(year);
		oDate.setMonth(month-1);
		oDate.setDate(1);
		
		/*oDate.getDay()  星期*/
		switch(oDate.getDay()){
			case 0: //如果1号是周日,周日对应的是第7个td
			for(var i=0;i<dayNum ; i++){
				aTd[i+7].innerHTML= i+1;//第7个td设为1号  i是从0开始 所以要+1
			}
			break;
			
			case 6: 
			for(var i=0;i<dayNum ; i++){
				aTd[i+6].innerHTML= i+1;
			}
			break;
			
			case 5:  
			for(var i=0;i<dayNum ; i++){
				aTd[i+5].innerHTML= i+1; 
			}
			break;
			
			case 4:  
			for(var i=0;i<dayNum ; i++){
				aTd[i+4].innerHTML= i+1; 
			}
			break;
			
			case 3:  
			for(var i=0;i<dayNum ; i++){
				aTd[i+3].innerHTML= i+1; 
			}
			break;
			
			case 2:  
			for(var i=0;i<dayNum ; i++){
				aTd[i+2].innerHTML= i+1; 
			}
			break;
			
			case 1:  
			for(var i=0;i<dayNum ; i++){
				aTd[i+1].innerHTML= i+1; 
			}
			break;
		}
		
		/*ajax 添加金额 */
		ajax(‘data.js?‘+Math.random(),function(s){
			 
			var j = eval(‘(‘+s+‘)‘);
			var iNow = 0;
			
			/*找出1号在td中的位置*/
			for( var i = 0; i< aTd.length ;i++ ){
				if( aTd[i].innerHTML ==1 ){
					iNow = i;
				}
			}
			
			/*如果j.code==1 存在的时候*/
			if(j.code){
				for( var i = 0; i< j.list.length ; i++ ){
					/*如果data list 数组中有值的话 就给iNow+i的 td加金额*/
					if( j.list[i] ){
						var p = document.createElement(‘p‘);
						p.innerHTML=j.list[i]+‘元‘;
						aTd[iNow + i].appendChild(p)
					}
				}
			
			}
			
		
		})
		
		
		/**如果iNowTime的月份是1月,那么左侧的月份应该是12 **/
		/**如果iNextTime的月份是12月,那么右侧的月份应该是1 **/
		
		if( month ==1 && bBtn ){ //bBtn 是判断左侧 的 也就是iNowTime的div
			obj.oTitle.getElementsByTagName(‘span‘)[0].innerHTML=12;
		}else if( month ==12 && !bBtn ){
			obj.oTitle.getElementsByTagName(‘span‘)[0].innerHTML=1;
		}
		
		
	}
	/**判断闰年**/
	function isLeapYear(year){
		if(year%4==0 && year%100!=0){
			return true;
		}
		else{
			if(year%400==0){
				return true;
			}
			else{
				return false;
			}
		}
	}
	
	
	/*showColor*/
	function showColor(date){
			var result=[];
			var bBtn = true;
			var index=0;
			var re = new RegExp(‘‘+date+‘(<p>)*‘);//* 至少出现0次 就是p有没有都可以
			for( var i = 0; i< aTd.length ; i++ ){
				if( aTd[i].innerHTML !=‘‘){
					result.push(aTd[i])
				}
			}
			/*当前日期变红*/
			/*判断当前日期在oNowTime div内*/
			var oDate = new Date();
			if( aNowSpan[1].innerHTML==oDate.getFullYear()  && aNowSpan[2].innerHTML == (oDate.getMonth()+1) ){
				for( var i = 0; i < result.length ; i++ ){
					if( re.test( result[i].innerHTML ) && bBtn ){
						result[i].className =‘red‘;
						index = i;
						bBtn = false; //只要找到一个当前日期  立马变为false,只找一次,当前日期的div内找
					}
				}
				/*让当前日期 的后十项都变为蓝色*/
				var len = index +11;
				for( len; index +1 < len; index++ ){
					result[index+1].className =‘blue‘
				}
				
			}else{
				for( var i = 0; i < result.length ; i++ ){
					result[i].className=‘‘
				}
				
			}
			
	}
	
	/*showBtn*/
	function showBtn(){
		var leftYear = parseInt(aNowSpan[1].innerHTML);
		var leftMonth =  parseInt(aNowSpan[0].innerHTML);
		var rightYear = parseInt(aNextSpan[1].innerHTML);
		var rightMonth = parseInt(aNextSpan[0].innerHTML);
		
		aNowSpan[0].parentNode.onclick=function(){
			/*如果oNowTime左侧月份是12月份 点击之后  当前年份要减去1 下个月月份变成1 */
			if( leftMonth == 12 ){
				showDate( oNowTime, leftYear-1,leftMonth , true );
				showDate( oNextTime, leftYear,1 );
			}else{
				showDate( oNowTime, leftYear,leftMonth , true );
				showDate( oNextTime, leftYear,leftMonth+1 );
			}
			
			
			showBtn();// 可以点击n多次
			showColor( (new Date).getDate() );
			hideLastTr()
		}
		
		aNextSpan[0].parentNode.onclick=function(){
			/*如果oNowTime左侧月份是12月份 点击之后  当前年份要减去1 下个月月份变成1 */
			if( rightMonth == 1  ){
				showDate( oNowTime, rightYear+1,12 , true );
				showDate( oNextTime, rightYear+1,rightMonth );
			}else{
				showDate( oNowTime, rightYear,rightMonth-1 , true );
				showDate( oNextTime, rightYear,rightMonth );
			}
			
			
			showBtn();// 可以点击n多次
			showColor( (new Date).getDate() );
			hideLastTr()
		}
		
	}

	/*showClick*/
	function showClick(){
		var re = /(\d+)((<p>)*)/;
		var oDate = new Date();
		/*红色的或蓝色的可点击*/
		for( var i = 0; i < aTd.length ; i++ ){
			aTd[i].index = i;
			aTd[i].onclick = function(){
				if( this.className ==‘red‘ || this.className ==‘blue‘ ){
				if( this.index > aTd.length/2 ){ //右边
					if( oDate.getMonth()+2 ==1 ){
						 this.innerHTML.replace( re , function($0, $1){
							aInput[0].value =( oDate.getFullYear()+1) +‘-‘ + (oDate.getMonth()+1) +‘-‘+$1					
					  	 })
					}else{
							this.innerHTML.replace(re,function($0,$1){
							
								aInput[0].value = oDate.getFullYear() +‘-‘ + (oDate.getMonth()+2) + ‘-‘ +  $1;
							
							});
						}
					
					
				}else{
					  this.innerHTML.replace( re , function($0, $1){
							aInput[0].value = oDate.getFullYear() +‘-‘ + (oDate.getMonth()+1) +‘-‘+$1					
					  })
				}
			}
			
			if( this.getElementsByTagName(‘p‘)[0] ){
				aInput[1].value = this.getElementsByTagName(‘p‘)[0].innerHTML 
			}else{
				aInput[1].value = ‘‘ 
			}
			
			oDiv.style.display=‘none‘;
			bBtn = true
			}//end click
			
		} 
	}

	/*hidelastTr*/
	function hideLastTr(){
		var bBtn = true;
		var bBtn2 = true;
	    for( var i = 35;i < 42; i++ ){
			if( aTd[i].innerHTML!=‘‘ ) bBtn = false
		}
		
		if( bBtn ){
			 for( var i = 35;i < 42; i++ ){
				  aTd[i].style.display =‘none‘
			 }
		}
		
		for( var i = 77;i < 84; i++ ){
			if( aTd[i].innerHTML!=‘‘ ) bBtn2 = false
		}
		
		if( bBtn2 ){
			 for( var i = 77;i < 84; i++ ){
				  aTd[i].style.display =‘none‘
			 }
		}
		
	}
}

  

 

联动日历

原文:http://www.cnblogs.com/webskill/p/4472592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!