`
huibin
  • 浏览: 756951 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

实现一个日历形式的日期输入框

    博客分类:
  • JS
阅读更多

<script language=javascript>
var DS_x,DS_y;
function dateSelector()  //构造dateSelector对象,用来实现一个日历形式的日期输入框。
{
  var myDate=new Date();
  this.year=myDate.getFullYear();  //定义year属性,年份,默认值为当前系统年份。
  this.month=myDate.getMonth()+1;  //定义month属性,月份,默认值为当前系统月份。
  this.date=myDate.getDate();  //定义date属性,日,默认值为当前系统的日。
  this.inputName='';  //定义inputName属性,即输入框的name,默认值为空。注意:在同一页中出现多个日期输入框,不能有重复的name!
  this.display=display;  //定义display方法,用来显示日期输入框。
}
function display()  //定义dateSelector的display方法,它将实现一个日历形式的日期选择框。
{
  var week=new Array('日','一','二','三','四','五','六');
  document.write("<style type=text/css>");
  document.write("  .ds_font td,span  { font: normal 12px 宋体; color: #000000; }");
  document.write("  .ds_border  { border: 1px solid #000000; cursor: hand; background-color: #DDDDDD }");
  document.write("  .ds_border2  { border: 1px solid #000000; cursor: hand; background-color: #DDDDDD }");
  document.write("</style>");
  document.write("<input style='text-align:center;' id='DS_"+this.inputName+"' name='"+this.inputName+"' value='"+this.year+"-"+this.month+"-"+this.date+"' title=双击可进行编缉 ondblclick='this.readOnly=false;this.focus()' onblur='this.readOnly=true' readonly>");
  document.write("<button style='width:60px;height:18px;font-size:12px;margin:1px;border:1px solid #A4B3C8;background-color:#DFE7EF;' type=button onclick=this.nextSibling.style.display='block' onfocus=this.blur()>选择日期</button>");
  document.write("<div style='position:absolute;display:none;text-align:center;width:0px;height:0px;overflow:visible' onselectstart='return false;'>");
  document.write("  <div style='position:absolute;left:-60px;top:20px;width:142px;height:165px;background-color:#F6F6F6;border:1px solid #245B7D;' class=ds_font>");
  document.write("    <table cellpadding=0 cellspacing=1 width=140 height=20 bgcolor=#CEDAE7 onmousedown='DS_x=event.x-parentNode.style.pixelLeft;DS_y=event.y-parentNode.style.pixelTop;setCapture();' onmouseup='releaseCapture();' onmousemove='dsMove(this.parentNode)' style='cursor:move;'>");
  document.write("      <tr align=center>");
  document.write("        <td width=12% onmouseover=this.className='ds_border' onmouseout=this.className='' onclick=subYear(this) title='减小年份'><<</td>");
  document.write("        <td width=12% onmouseover=this.className='ds_border' onmouseout=this.className='' onclick=subMonth(this) title='减小月份'><</td>");
  document.write("        <td width=52%><b>"+this.year+"</b><b>年</b><b>"+this.month+"</b><b>月</b></td>");
  document.write("        <td width=12% onmouseover=this.className='ds_border' onmouseout=this.className='' onclick=addMonth(this) title='增加月份'>></td>");
  document.write("        <td width=12% onmouseover=this.className='ds_border' onmouseout=this.className='' onclick=addYear(this) title='增加年份'>>></td>");
  document.write("      </tr>");
  document.write("    </table>");
  document.write("    <table cellpadding=0 cellspacing=0 width=140 height=20 onmousedown='DS_x=event.x-parentNode.style.pixelLeft;DS_y=event.y-parentNode.style.pixelTop;setCapture();' onmouseup='releaseCapture();' onmousemove='dsMove(this.parentNode)' style='cursor:move;'>");
  document.write("      <tr align=center>");
  for(i=0;i<7;i++)
 document.write("      <td>"+week[i]+"</td>");
  document.write("      </tr>");
  document.write("    </table>");
  document.write("    <table cellpadding=0 cellspacing=2 width=140 bgcolor=#EEEEEE>");
  for(i=0;i<6;i++)
  {
    document.write("    <tr align=center>");
 for(j=0;j<7;j++)
      document.write("    <td width=10% height=16 onmouseover=if(this.innerText!=''&&this.className!='ds_border2')this.className='ds_border' onmouseout=if(this.className!='ds_border2')this.className='' onclick=getvalue(this,document.all('DS_"+this.inputName+"'))></td>");
    document.write("    </tr>");
  }
  document.write("    </table>");
  document.write("    <span style=cursor:hand onclick=this.parentNode.parentNode.style.display='none'>【关闭】</span>");
  document.write("  </div>");
  document.write("</div>");
  dateShow(document.all("DS_"+this.inputName).nextSibling.nextSibling.childNodes[0].childNodes[2],this.year,this.month)
}
function subYear(obj)  //减小年份
{
  var myObj=obj.parentNode.parentNode.parentNode.cells[2].childNodes;
  myObj[0].innerHTML=eval(myObj[0].innerHTML)-1;
  dateShow(obj.parentNode.parentNode.parentNode.nextSibling.nextSibling,eval(myObj[0].innerHTML),eval(myObj[2].innerHTML))
}
function addYear(obj)  //增加年份
{
  var myObj=obj.parentNode.parentNode.parentNode.cells[2].childNodes;
  myObj[0].innerHTML=eval(myObj[0].innerHTML)+1;
  dateShow(obj.parentNode.parentNode.parentNode.nextSibling.nextSibling,eval(myObj[0].innerHTML),eval(myObj[2].innerHTML))
}
function subMonth(obj)  //减小月份
{
  var myObj=obj.parentNode.parentNode.parentNode.cells[2].childNodes;
  var month=eval(myObj[2].innerHTML)-1;
  if(month==0)
  {
    month=12;
    subYear(obj);
  }
  myObj[2].innerHTML=month;
  dateShow(obj.parentNode.parentNode.parentNode.nextSibling.nextSibling,eval(myObj[0].innerHTML),eval(myObj[2].innerHTML))
}
function addMonth(obj)  //增加月份
{
  var myObj=obj.parentNode.parentNode.parentNode.cells[2].childNodes;
  var month=eval(myObj[2].innerHTML)+1;
  if(month==13)
  {
    month=1;
    addYear(obj);
  }
  myObj[2].innerHTML=month;
  dateShow(obj.parentNode.parentNode.parentNode.nextSibling.nextSibling,eval(myObj[0].innerHTML),eval(myObj[2].innerHTML))
}
function dateShow(obj,year,month)  //显示各月份的日
{
  var myDate=new Date(year,month-1,1);
  var today=new Date();
  var day=myDate.getDay();
  var selectDate=obj.parentNode.parentNode.previousSibling.previousSibling.value.split('-');
  var length;
  switch(month)
  {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      length=31;
      break;
    case 4:
    case 6:
    case 9:
    case 11:
      length=30;
      break;
    case 2:
      if((year%4==0)&&(year%100!=0)||(year%400==0))
        length=29;
      else
        length=28;
  }
  for(i=0;i<obj.cells.length;i++)
  {
    obj.cells[i].innerHTML='';
    obj.cells[i].style.color='';
    obj.cells[i].className='';
  }
  for(i=0;i<length;i++)
  {
    obj.cells[i+day].innerHTML=(i+1);
    if(year==today.getFullYear()&&(month-1)==today.getMonth()&&(i+1)==today.getDate())
      obj.cells[i+day].style.color='red';
    if(year==eval(selectDate[0])&&month==eval(selectDate[1])&&(i+1)==eval(selectDate[2]))
      obj.cells[i+day].className='ds_border2';
  }
}
function getvalue(obj,inputObj)  //把选择的日期传给输入框
{
  var myObj=inputObj.nextSibling.nextSibling.childNodes[0].childNodes[0].cells[2].childNodes;
  if(obj.innerHTML)
    inputObj.value=myObj[0].innerHTML+"-"+myObj[2].innerHTML+"-"+obj.innerHTML;
  inputObj.nextSibling.nextSibling.style.display='none';
  for(i=0;i<obj.parentNode.parentNode.parentNode.cells.length;i++)
    obj.parentNode.parentNode.parentNode.cells[i].className='';
  obj.className='ds_border2'
}
function dsMove(obj)  //实现层的拖移
{
  if(event.button==1)
  {
    var X=obj.clientLeft;
    var Y=obj.clientTop;
    obj.style.pixelLeft=X+(event.x-DS_x);
    obj.style.pixelTop=Y+(event.y-DS_y);
  }
}
</script>

<script language=javascript>
  var myDate=new dateSelector();
  myDate.year--;
  myDate.inputName='BIRTHDAY';  //注意这里设置输入框的name,同一页中日期输入框,不能出现重复的name。
  myDate.display();
</script>

分享到:
评论

相关推荐

    手机wap版日期输入框

    特别是在处理涉及时间信息的表单时,一个良好的日期输入框能显著提升用户体验。本文将深入探讨“手机WAP版日期输入框”这一主题,包括其设计原则、常见功能、以及如何使用如`mobiscroll`这样的库来实现高效、友好的...

    PopupCalendar日历选择输入框

    1. **弹出式界面**:当用户点击输入框时,一个包含完整日期的日历会以弹出窗口的形式显示出来,提供用户选择。 2. **日期选择**:用户可以通过点击日历上的日期来选择,也可以通过上下左右箭头快速切换月份和年份。...

    js简洁日历-日期选择-万年历

    "js简洁日历-日期选择-万年历"项目就是一个利用JavaScript实现的轻量级日历组件,它提供了用户友好的日期选择功能,适用于各种需要日期输入的场景。 这个日历组件的亮点在于其简洁性,意味着它可能具有高效的代码...

    JQuery 日历表 日期选择框 点击弹框

    "JQuery 日历表 日期选择框 点击弹框"这一主题聚焦于如何使用jQuery库创建一个功能丰富的日历选择组件,为用户提供方便的日期选取体验。以下是对这个知识点的详细讲解: 首先,jQuery是一个轻量级的JavaScript库,...

    JS日历控件(可选多个日期、很简单)

    本资源“JS日历控件(可选多个日期、很简单)”专注于提供一个简单的多日期选择功能,特别适用于那些对浏览器兼容性有较高要求的项目。这个控件非常适合初学者学习和使用,因为它的实现逻辑清晰,易于理解。 首先,...

    6个JS日历控件个JS日历控件

    当用户点击日历图标或者输入框时,日历会以弹出框的形式显示出来,用户可以选择一个日期后,控件会自动将选中的日期填充到对应的输入框。 2. **设计与样式**:日历控件的设计可以多样化,包括但不限于不同的颜色...

    日历在Jsp页面的显示

    在网页开发中,日历控件是一个非常常见的功能,它能帮助用户方便地选择日期,常见于表单填写、事件安排等场景。本程序以"日历在Jsp页面的显示"为主题,结合了Jquery和Jsp技术,提供了一个简单易学的示例。 首先,...

    页面所用到的日历控件:DatePicker

    1. **触发显示**:当用户点击特定的日期输入框时,控件会以弹出窗口的形式出现,展示一个月份视图,用户可以在其中选择日期。 2. **用户交互**:用户可以通过点击日历中的日期或者使用上下左右箭头来切换月份和年份...

    一个下拉日历

    下拉日历是一种常见的用户...总的来说,创建一个下拉日历涉及到前端的HTML、CSS和JavaScript,后端的日期处理,以及用户体验和无障碍性的考量。理解这些知识点并能灵活运用,是构建高效、用户友好的下拉日历的关键。

    超好用的js日历控件

    - 生成日历:根据当前日期创建一个包含月份和日期的表格结构。 - 显示日历:通过DOM操作(例如`appendChild`)将日历插入到页面适当位置。 - 选择日期:监听日历上的日期点击事件,更新输入框值并隐藏日历。 - *...

    万年历一年日历的输出和修改

    "万年历一年日历的输出和修改"是一个特定的功能模块,它允许用户不仅查看任意年份的日历,还能够进行日期和时间的修改。下面将详细讨论这个功能涉及到的技术点和实现方法。 首先,我们需要理解“万年历”的概念。...

    javaScript日历控件大全

    日历控件的创建首先需要构建一个HTML结构,通常包括一个用于展示月份的标题、一周的星期名称以及日期单元格。开发者可以使用`&lt;table&gt;`元素来组织这些元素,每个日期单元格是一个`&lt;td&gt;`元素,星期名称是`&lt;th&gt;`元素。...

    JavaScript弹出式日历

    这种日历通常以对话框或浮动窗口的形式出现,点击后会在输入框旁边显示一个包含日期的选择界面。用户选择日期后,所选日期会自动填充到关联的文本框中,为用户提供了一种直观且高效的输入方式。 实现JavaScript弹出...

    日历控件(简单实用)

    总之,这个"日历控件(简单实用)"提供了JavaScript实现日期选择功能的解决方案,对初学者来说是一次很好的学习机会,对于有经验的开发者来说,则是一个快速集成日历功能的实用工具。通过深入理解和定制这个控件,你...

    javascript 创建日历控件

    3. **日历布局**:日历的布局通常以表格的形式呈现,包含一个月的所有日期。每个日期单元格可以绑定点击事件,以便用户选择特定日期。 4. **日期逻辑**:我们需要计算当前月份的天数,并正确地填充每一天。考虑到...

    超精简弹出式日历代码

    “超精简弹出式日历代码”可能指的是一个利用JavaScript、CSS和可能的jQuery实现的轻量级解决方案,它能在需要时以弹出窗口的形式显示日历,提高用户体验。这样的实现方式通常比传统的HTML输入框更加友好,因为它...

    完整的日历代码(JavaScript版)

    4. **日历渲染**:JavaScript需要构建一个日历布局,通常以表格的形式显示月份和日期。这涉及到了HTML元素的创建和布局,以及日期逻辑的处理,确保每一天的正确显示。 5. **日期格式化**:当用户选择日期后,日期...

    js日历控件大全多种样式

    - 日历控件:网页上的一个交互元素,允许用户选择日期,常用于表单输入或计划管理。 2. **应用场景** - 表单填写:在注册、预订或事件提交表单中,用户可以选择特定日期。 - 时间调度:在项目管理或任务分配中,...

    带时间的日历控件js特效

    在这种情况下,我们讨论的是一个特殊的日历控件,它不仅包含日期选择功能,还集成了时间选择,这对于处理时间和日期相关的应用程序非常重要。这个控件是用JavaScript(js)实现的,JavaScript是一种广泛使用的客户端...

Global site tag (gtag.js) - Google Analytics