`
nmgxzm2001
  • 浏览: 11028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

以前写的多选日期控件,给大家分享下

阅读更多
今天整理资料发现了!还是以前写的,刚刚接触的jquery。和大家分享下思路
function Calendar(config){

	config=config||{};
	if((typeof config)!="object"){
		return;
	}
	for(var p in config){
		this[p]=config[p];
	}
	this.datas=new Map();
	//this.datasId="guestCalendar";
	this.selectDay=null;
	this.selectTime=null;
	this.selectKey=null;
	var DOC=document,getElement=function(id){return DOC.getElementById(id);};
	//对应的ids 0 显示年的  1 显示 月的 2 显示天的
	this.calendarIds=['easyJsYear','easyJsMonth','easyJsShowDate'];
	this.init=function(){
		var d=new Date();
		this.currentMonth=d.getMonth()+1;
		this.currentYear=d.getFullYear();
		d=null;
	};
	this.initShowCalendar=function(){
		this.year=this.currentYear;
		this.month=this.currentMonth;
		this.showYearMonth();
		this.showDate();
	};
	//o {year:2011} or {month:10}
	this.changeShowCalendar=function(o){
		var obj=o;
		if(obj.year){
			if(this.year+obj.year<1990){
				return;
			}
			this.year=this.year+obj.year;
		}
		if(obj.month){
			if(this.month+obj.month>12||this.month+obj.month<1){
				return;
			}
			this.month=this.month+obj.month;
		}
		this.showYearMonth();
		this.showDate();
	};
	this.showYearMonth=function (){
		$("#"+this.calendarIds[0]).html(this.year+"年");
		$("#"+this.calendarIds[1]).html(this.month+"月");
	};
	this.showDate=function(){		
		var y = this.year, m = this.month;
		//判断当月有跨越几周
		var week=Math.ceil((new Date(y, m, 0).getDate() + new Date(y, m - 1, 1).getDay()) / 7);
		//当月开始是星期几
		var start_week=new Date(y, m - 1, 1).getDay();
		//当月结束是星期几
		var end_week=new Date(y, m, 0).getDay();
		//当前月有多少天
		var lastDate=new Date(y, m, 0).getDate();
		
		var tempdate=0,vName=this;		
		var parent=getElement(this.calendarIds[2]);
		removeAllNodes(this.calendarIds[2]);
		for(var i=0;i<week;i++){
			var tr=DOC.createElement("tr");
			for(var ii=0;ii<7;ii++){
				var td=DOC.createElement("td");
				td.className="nEasyJsWeekTd";
				tr.appendChild(td);
				if(i==0){
					if(ii<start_week){
						continue;
					}					
				}else if(i==(week-1)){
					if(ii>end_week){
						continue;
					}
				}
				tempdate++;
				var tkey=parseInt(""+this.year+(this.month.toString().length>1?this.month:"0"+this.month)+(tempdate.toString().length>1?tempdate:"0"+tempdate));
				if(this.datas.containsKey(tkey)){
					td.className="sEasyJsWeekTd";
				}
				td.onclick = function(o){vName.chanageDate(this);};//兼容ie6
				td.innerHTML=tempdate;					
			}
			parent.appendChild(tr);
		}	
		
	};
	this.GenerateCalender=function(){
		DOC.write('<div id="easyJsCalendarDate" class="easyJsCalendarDate" style="display:none">');
		DOC.write('<div class="easyJsYearMonth"><table width="100%" border="0" cellspacing="1" cellpadding="1"><tr><td onclick="'+this.varName+'.changeYear(-1)">&lt;&lt;</td><td onclick="'+this.varName+'.changeMonth(-1)">&lt;</td><td id="easyJsYear"></td><td id="easyJsMonth"></td><td onclick="'+this.varName+'.changeMonth(1)">&gt;</td><td onclick="'+this.varName+'.changeYear(1)">&gt;&gt;</td></tr></table></div>');
		DOC.write(' <div class="easyJsWeek"><table width="100%" border="0" cellspacing="1" bgcolor="#CCCCCC" cellpadding="1"><tr><th scope="col">日</th><th scope="col">一</th><th scope="col">二</th><th scope="col">三</th><th scope="col">四</th><th scope="col">五</th><th scope="col">六</th></tr><tbody id="easyJsShowDate"></tbody>');
		DOC.write('<tr><td onclick="'+this.varName+'.showToday()" colspan="3">今天</td><td onclick="'+this.varName+'.closeDateWindow()" colspan="3">关闭</td><td onclick="resetCalendarTimeForm()">c</td></tr></table></div></div>');
	};
	this.changeMonth=function(type){
		this.changeShowCalendar({month:type});
	};
	this.changeYear=function(type){
		this.changeShowCalendar({year:type});
	};
	this.showToday=function(){
		this.initShowCalendar();
	};
	this.closeDateWindow=function(){
		$("#easyJsCalendarDate").hide();
	};
	
	this.setDatasInPage=function(){
		var d=this.datas;
		var s=this.datas.toString(
			function(key,values){				
				return values;	
			}
		);
		var enter=getElement(this.enter);
		if(enter.nodeName=='INPUT'){
			enter.value=s;
		}else
		  enter.innerHTML=s;
	};
	this.clearTimePickerSelect=function(){
		for(var i=0;i<24;i++){
			this.selectTime.splice(i,1,-1);
		}
		var table=getElement("easyJsCalendarTimeTable");
		for(var j=0;j<4;j++){
			var tr=table.rows[j];
			for(var k=0;k<6;k++){
				tr.cells[k].className="cEasyJsCalenderTimeTd";
			}
		}
	};
	
	this.setStyleProperty=function(o,name,value){
		o.style[name]=value;
	};
	this.chanageDate=function(o){
		this.selectDay=o;
		var tmonth=this.month.toString().length>1?this.month:"0"+this.month,tday=this.selectDay.innerHTML.length>1?this.selectDay.innerHTML:"0"+this.selectDay.innerHTML;
		this.selectKey=parseInt(this.year+""+tmonth+""+tday);
		var selectValue=this.year+"-"+tmonth+"-"+tday;
		if(this.datas.containsKey(this.selectKey)){
			this.selectTime=this.datas.get(this.selectKey);
			this.datas.remove(this.selectKey);
			this.selectDay.className="nEasyJsWeekTd";
		}else{
			this.datas.modify(this.selectKey,selectValue,true);
			this.selectDay.className="sEasyJsWeekTd";
		}
		this.setDatasInPage();
	};

	this.triggerEvent=function(){
		if(this.trigger){
			var t=this;
			$("#"+this.trigger).click(function(e) {
             $("#easyJsCalendarDate").css("position","absolute").css("top", e.pageY+ "px").css("left", e.pageX + "px");
			 t.showDatePicker();
         	});			
		}
	};
	this.showDatePicker=function(id){
		$("#easyJsCalendarDate").show();
	};
	this.putDatas=function(){
		if(this.dataMaps){
			this.dataMaps.put(this.dataKey,this.datas);
		}
	}
	this.setDates=function(key){
		if(!this.dataMaps){
			this.dataMaps=new Map();
		}
		this.dataKey=key;
		if(this.dataMaps.containsKey(key)){
			this.datas=this.dataMaps.get(key);
		}else{
			this.datas=new Map();
		}		
	}
	this.GenerateCalender();
	this.init();
	this.initShowCalendar();
	this.triggerEvent();
}

下面是用的的相关function
/*
 * Map对象,实现Map功能
 *
 *
 * size() 获取Map元素个数
 * isEmpty() 判断Map是否为空
 * clear() 删除Map所有元素
 * put(key, value) 向Map中增加元素(key, value)  
 * remove(key) 删除指定key的元素,并返回该key的value
 * get(key) 获取指定key的元素值value
 * modify(key,value,auto) 修改key的value.如果auto为true,key不存在,会将key和value添加为新值;为false,key不存在将不进行添加
 * containsKey(key) 判断Map中是否含有指定key的元素
 * containsValue(value) 判断Map中是否含有指定value的元素
 * keys() 获取Map中所有key的数组(array)
 * values() 获取Map中所有value的数组(array)
 *
 */



function Map(){
	/**
	 *初始化datas
	 */
	this.initialize=function(){
		this.datas=new Object();
	}
	
	/**  
     * 得到datas中的对象数目  
     */  
    this.size=function() {     
        var i = 0;
        for(var ele in this.datas) {   
            i ++;   
        }   
        return i;   
    };  
	this.isEmpty=function(){
		return this.size()>0?false:true;
	};
	this.clear=function(){		
        for(var key in this.datas) {   
            delete this.datas[key];   
        }   
	};
	this.put=function(key, value) {
		return this.datas[key] = value;
	}
	this.remove=function(key) {
    	var value = this.datas[key];
    	delete this.datas[key];
    	return value;
    };
	this.get=function(key) {
		if (this.datas[key] !== Object.prototype[key])
		  return this.datas[key];
	};
	this.modify=function(key,value,auto){
		if(this.containsKey(key)){
			this.remove(key);
			this.put(key,value);
		}else{
			if(auto){
				this.put(key,value);
			}
		}
	};
	this.containsKey=function(key){
		if(key in this.datas){
			return true;
		}
		return false;
	};
	this.containsValue=function(value){
		var r=false;
		for(var key in this.datas){
			if(this.datas[key]==value){
				r=true;
				break;
			}
		}
		return r;
	}
	this.keys=function() {
		return this.pluck('key');
	};
	this.values=function() {
		return this.pluck('value');
	};
	
	/**  
     * 遍历Map,执行处理函数   
     * @param {Function} 回调函数 function(arrary){..}  
     */  
	this.each=function(fn){
		for (var key in this.object) {
		  var value = this.object[key], pair = [key, value];
		  pair.key = key;
		  pair.value = value;
		  fn(pair);
		}
	};
		
	/**  
     * 返回object的对象的复制  
     */ 	
	this.toObject=function(){
		var destination={};
		for (var property in this.datas)
			destination[property] = this.datas[property];
		return destination;
    };
	
	this.pluck=function(property) {
		var results = [];
		for(var key in this.datas){
			if(property=='key'){
				results.push(key);
			}else if(property=='value'){
				results.push(this.datas[key]);
			}
		}
		return results;
	};
	
	
	
       
    /**  
     * toString方法 
	 * fn是调用函数
     */  
    this.toString=function(fn) {   
        var b = this.datas;   
        var buf = [];   
        for(var key in b) {   
            buf.push(fn(key,b[key]));    
            buf.push('\n');   
        }   
        return buf.join('');   
    };
	
	this.formatToString=function(fn){
		var keys=this.keys();
		//function sortNumber(a,b){return a - b} 从小到大 ;function sortNumber(a,b){return b - a} 从大到小
		keys.sort(function sortNumber(a,b){return a - b});
		var buf=[];
		for(var i=0;i<keys.length;i++){
			buf.push(fn(keys[i],this.datas[keys[i]]));
			buf.push("\n");
		}
		return buf.join('');
	};
	
	this.initialize(); 
}

function StringBuffer(){
	
	this.array=[];
	this.append=function(string){
		this.array.push(string);
	}
	this.toString=function(){
		return this.array.join("");
	}
}
//删除该id下的所有节点
function removeAllNodes(id){
	var parent=document.getElementById(id);
    while(parent.childNodes.length>0) {
        parent.removeChild(parent.childNodes[0]);
    }
}


在页面调用

<body>
<textarea id="guestCalendar"  style="height:100px; width:200px;"></textarea>
<input id="trigger" value="日期" type="button"/>
<script>


var datePicker=new Calendar({
	enter:'guestCalendar',//显示值的的id  
	trigger:"trigger"  //触发控件id,该控件要支持click
});
</script>
</body>
分享到:
评论

相关推荐

    可多选的日期控件

    在IT领域,尤其是在前端开发中,"可多选的日期控件"是一个常见的需求,它允许用户在日历界面中选择多个日期,而非只能选择单个日期。这种控件广泛应用于各种应用程序,如行程规划、会议安排或者数据分析等场景。在本...

    可多选日期控件(转)

    在传统的日期选择器中,用户通常只能选择单个日期,而可多选日期控件则扩展了这一功能,使得用户可以一次性选取多个日期,满足更复杂的业务需求。 实现可多选日期控件的技术通常涉及前端框架和库,如JavaScript、...

    多选日历控件

    "多选日历控件"是指能够允许用户选择多个日期的特定日历组件。这类控件在许多应用中都有广泛的应用,如会议安排、任务管理、旅行预订等场景,因为它提供了灵活的日期选择方式。 描述中提到的“可多选的日期控件”...

    日期多选控件

    在这个场景下,"日期多选控件"的实现和优化至关重要,它能提供良好的用户体验,使得日期选择过程简单快捷。 首先,我们要理解这个控件的基本功能。日期多选控件允许用户选择一个日期范围,而不是单一的日期。用户...

    WPF MulitCheckComboBox 多选下拉控件

    在你提供的资料中,我们讨论的是一个名为"MulitCheckComboBox"的自定义控件,它是一个专门针对多选功能的下拉组合框。 WPF 是微软提供的一种用于构建桌面应用的UI框架,它基于.NET Framework,提供了丰富的图形层和...

    ASP.NET多选下拉框自定义控件

    本文将深入探讨如何创建一个自定义的多选下拉框控件,以提升用户体验,并利用Ajax技术实现异步更新,提高页面的响应速度。 一、多选下拉框控件的理解 多选下拉框控件是一种允许用户从一系列选项中选择多个值的UI...

    C# 基于ComboBox 下拉多选 自定义控件 源代码

    继承自C# Winform中ComboBox的下拉多选控件,操作简单,效果非常好 1、多选。 2、可绑定List,DataTable,Dictionary类型的数据源。 3、在下拉列表中可显示自定义的多列数据。 4、可在下拉列表中通过输入关键字,...

    asp.net下拉多选控件

    ASP.NET 下拉多选控件是一种常见的Web开发组件,它允许用户在下拉菜单中选择一个或多个选项。这种控件在数据输入、过滤或设置首选项时非常有用,尤其适用于空间有限或需要简洁界面的设计。在ASP.NET框架中,我们可以...

    js日历控件日期多选Kalendajs

    在这个场景中,"js日历控件日期多选Kalendajs" 提供了一种功能强大的解决方案,允许用户在日历上选择多个日期,甚至可以跨越多个月份。 Kalendajs是一款专门设计的日历插件,它具有日期多选功能,可以极大地提升...

    WPF_多选树控件.zip

    WPF的树形控件(TreeView)默认情况下只允许单选,但是通过自定义控件样式和行为,我们可以扩展其功能以支持多选。首先,我们需要为TreeView项模板(TreeViewItemTemplate)添加一个多选框(CheckBox),这样用户就...

    C#-Winform-DEV控件-多选-单选-时间-布局【原创】

    DEV控件库提供了多种控件,包括布局控件(layoutControl)、多选控件(CheckedComboBoxEdit)、单选控件(comboBoxEdit)以及日期时间控件(DateEdit)。在这篇文章中,我们将深入探讨这些控件的使用方法和技巧。 ...

    Swing 多选栏控件

    在Swing中,我们可以通过多种组件来创建丰富的交互式应用,其中包括用于实现多选功能的控件。本篇文章将深入探讨Swing中的多选栏控件及其使用方法。 在Swing中,多选栏通常指的是`JList`或`JTable`控件,它们允许...

    jQuery制作简洁漂亮日期日历控件包含多选日期等

    本教程将详细讲解如何利用jQuery技术制作一款简洁且功能强大的日期日历控件,该控件支持多选日期,允许用户方便地选择开始和结束时间。这种控件的应用场景广泛,例如在预订系统、事件安排或数据分析中,可以极大地...

    多选日期控件(还可取消选择)

    多选日期,以逗号隔开,选择后,还可以取消选择

    c#winform下拉多选自定义控件(带全选)

    在C# WinForm开发中,有时我们需要创建具有更...这样,我们就创建了一个具备全选/全取消功能的C# WinForm下拉多选自定义控件。这个控件可以方便地集成到各种WinForm应用程序中,提高开发效率,提供更好的用户交互体验。

    Kalendae.js日历控件可多选日期时间代码

    1. **多选模式**:Kalendae.js的一大亮点就是支持多选日期,用户可以同时选择多个日期,这对于需要处理一系列日期的场景非常有用,例如行程安排或者活动规划。 2. **时间选择**:除了基本的日期选择,Kalendae.js还...

    C#重定义的下拉多选控件,支持显示多列、单选/多选,文件中附有源码

    在C# Winform开发中,有时我们需要创建一个功能丰富的下拉多选控件,以满足更复杂的用户交互需求。这个自定义控件是基于标准的ComboBox控件进行重定义和扩展,提供了许多实用的功能,包括单选/多选、显示多列数据、...

    JS日期多选控件

    在JavaScript编程中,日期多选控件是一种常见且实用的功能,尤其在开发Web应用程序时,如日程管理、在线预订或报表生成等场景。本文将深入探讨如何利用JS实现这样的功能,包括连续选择日期和多个月份的选择。 首先...

    日期多选控件 日期离散选择

    今天在做一个项目的时候, 需要一个多选日期控件, 在网上搜索了一大圈都不理想。最后狠心自己写了一个。 可以实现日期多选,点选, AJAX上传和更新等。 AJAX放我已经注释掉,如果你需要的话 可以稍作修改。

    多选的树控件

    "多选的树控件"是一种常见的用户界面元素,它允许用户在一个层次结构的数据结构中进行选择,而且支持选择一个以上的项目。这种控件广泛应用于文件管理器、设置菜单、数据库管理工具等多个场景。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics