<style>
*{margin: 0px; padding: 0px;}
</style>
<input type="text" name="year" onclick="Canlender.getYear($(this))" />
<input type="text" name="year" onclick="Canlender.getMonth($(this))" />
<script src="jquery.js"></script>
<script>
var Canlender = new Object();
Canlender.years = new Array();
Canlender.yearIndex = new Array();
Canlender.months = new Array();
Canlender.date = new Date();
Canlender.year = Canlender.date.getFullYear();
Canlender.page = 0;
Canlender.pageNum = 12;
Canlender.startYear = 2000; var i, j;
for (i = Canlender.startYear, j = 0; i <= Canlender.year; ++i, ++j) {
Canlender.years[j] = i;
Canlender.yearIndex[i] = j;
}
for (i = 1, j = 0; i <= 12; ++i, ++j) {
Canlender.months[j] = i;
} Canlender.getYearTds = function(goPage) {
if (typeof(goPage) == 'undefined') {
goPage = Math.ceil((Canlender.yearIndex[Canlender.year] + 1) / Canlender.pageNum);
} var totalPage = Math.ceil(Canlender.years.length / Canlender.pageNum); goPage = goPage > totalPage ? totalPage : goPage;
goPage = goPage <= 0 ? 1 : goPage; Canlender.page = goPage; var startIndex = (goPage - 1) * Canlender.pageNum;
var endIndex = startIndex + Canlender.pageNum - 1; endIndex = endIndex > Canlender.yearIndex[Canlender.year] ? Canlender.yearIndex[Canlender.year] : endIndex; var rtn = '';
var counter = 0;
var addtr = false;
for (i = startIndex; i <= endIndex; ++i) {
if (counter % 4 == 0) {
rtn += '<tr>';
}
rtn += '<td width="25%">';
rtn += '<span style="cursor: pointer; font-size: 12px;" onclick="Canlender.sender.val($(this).html()); Canlender.yearBox.css(\'display\', \'none\');">' + Canlender.years[i] + '</span>';
rtn += '</td>'; ++counter;
if (counter % 4 == 0) {
rtn += '</tr>';
}
} while (counter % 4 != 0) {
rtn += '<td width="25%">&nbsp;</td>';
++counter;
if (counter % 4 == 0) {
rtn += '</tr>';
}
} if ($('#calenderYear').length > 0) {
$('#calenderYear').html(rtn);
} else {
return rtn;
}
} Canlender.getMonthTds = function() {
var rtn = '';
var counter = 0;
for (i = 1; i <= 12; ++i) {
if (counter % 4 == 0) {
rtn += '<tr>';
}
rtn += '<td width="25%">';
v = i;
if (i < 10) {
v = '0' + v;
}
rtn += '<span style="cursor: pointer; font-size: 12px;" onclick="Canlender.sender.val($(this).html()); Canlender.monthBox.css(\'display\', \'none\');">' + v+ '</span>';
rtn += '</td>'; ++counter;
if (counter % 4 == 0) {
rtn += '</tr>';
}
}
return rtn;
} Canlender.getYear = function(sender) {
Canlender.sender = sender;
if (Canlender.yearBox) {
Canlender.yearBox.css('display', 'block');
} else {
var pages = Canlender.getYearTds();
var pos = sender.position();
var left = pos.left;
var top = pos.top + sender.height();
var str = '<div style="width: 160px; border: 1px solid black; padding: 2px; position: absolute; z-index:999; top: ' + top + 'px; left: ' + left + '" id="calenderYearId">';
str += '<div style="background: black; color: white; font-size: 12px; line-height:16px; height: 16px; text-align: center;">';
str += '<span onclick="Canlender.getYearTds(' + (Canlender.page - 1) + ')" style="padding-right: 20px; cursor: pointer;">&lt;&lt;</span>';
str += '<span>请选择年份</span>';
str += '<span onclick="Canlender.getYearTds(' + (Canlender.page + 1) + ')" style="padding-left: 20px; cursor: pointer;">&gt;&gt;</span>';
str += '</div>';
str += '<div style="padding: 2px 0px;"><table width="160px" border=0 id="calenderYear">';
str += pages;
str += '</table></div>';
str += '<div style="padding: 2px; text-align:center;"><span style="color: black; cursor: pointer; font-size:12px;" onclick="Canlender.yearBox.css(\'display\', \'none\')">关闭</span></div>';
str += '</div>';
Canlender.yearBox = $(str);
sender.after(Canlender.yearBox);
}
} Canlender.getMonth = function(sender) {
Canlender.sender = sender;
if (Canlender.monthBox) {
Canlender.monthBox.css('display', 'block');
} else {
var pages = Canlender.getMonthTds();
var pos = sender.offset();
var left = pos.left;
var top = pos.top;
var str = '<div style="width: 160px; border: 1px solid black; padding: 2px; position: relative; top: ' + top + 'px; left: ' + left + '" id="calenderMonthId">';
str += '<div style="background: black; color: white; font-size: 12px; line-height:16px; height: 16px; text-align: center;">';
str += '<span>请选择月份</span>';
str += '</div>';
str += '<div style="padding: 2px 0px;"><table width="160px" border=0 id="calenderMonth">';
str += pages;
str += '</table></div>';
str += '<div style="padding: 2px; text-align:center;"><span style="color: black; cursor: pointer; font-size:12px;" onclick="Canlender.monthBox.css(\'display\', \'none\')">关闭</span></div>';
str += '</div>';
Canlender.monthBox = $(str);
sender.after(Canlender.monthBox);
}
}
</script>

可以自己改样式..

JavaScript-自制日历控件(只选择年月)的更多相关文章

  1. vue日历控件,自定义选择年月 选择年月日 选择年月日时 选择年月日时分,自定义日期范围

    下载地址:https://pan.baidu.com/s/1iEZl4kDkEg4ybwqc7aI7vQ 注:功能更加全面的日历控件请访问:https://www.cnblogs.com/mrzhu/ ...

  2. bootstrap的datetimepicker控件只选择年月的配置

    <script src="{% static "jquery/jquery-1.11.3.min.js" %}"></script> & ...

  3. javaScript实现日历控件

    近期学习js.闲来无事就写了个简单的日历控件.不知道别人是怎么实现的.纯粹自己想法写的, 写的不好 ,但能够起到抛砖引玉的作用. 先来看效果. watermark/2/text/aHR0cDovL2J ...

  4. zui框架配置日期控件只显示年月

    zui框架配置日期控件datetimepicker只显示年月 <!DOCTYPE html> <head> <script src="~/Scripts/jqu ...

  5. ExtJs4.0日期控件只显示年月按年月格式会跳月的解决办法

    如果是Ext.form.panel的话,只要设置一下属性就可以.如下代码: { text : '期间', width : 80, sortable : true, dataIndex : 'accou ...

  6. WPF DatePicker日期控件只显示年月

    1.需要引用2个类,第一个类DatePickerCalendar public class DatePickerCalendar { public static readonly Dependency ...

  7. layui日历控件设置选择日期不能超过当前日期

    layui.use('laydate', function() { var laydate = layui.laydate; laydate.render({ elem : '#begin', max ...

  8. mvc 日历控件

    第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...

  9. WdatePicker日历控件动态设置属性参数值

    首先吐槽一下需求人员给了我一个很坑的需求:WdatePicker日历控件里面选择的最小时间(minDate)的值是级联动态改变的,而且这个值要从数据库获取,这样子只能使用 ajax 来发起请求获取mi ...

随机推荐

  1. spring Annotation 组件注入

    spring 注解的分类 启动spring自己主动扫描功能 <context:component-scan/> 1.@Repository: 它用于将数据訪问层 (DAO 层 ) 的类标识 ...

  2. [翻译] ADPopupView 触摸弹出视窗

    ADPopupView 触摸弹出视窗 https://github.com/Antondomashnev/ADPopupView ADPopupView is an iOS drop-in class ...

  3. Flask 学习(四)静态文件

    Flask 学习(四)静态文件 动态 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件.理想情况下你的服务器已经配置好提供静态文件的服务. 在开发过程中, Flask 也能做 ...

  4. python的内存回收机制即gc模块讲解

    最后容易造成内存问题的通常就是全局单例.全局缓存.长期存活的对象 引用计数(主要), 标记清除, 分代收集(辅助) 引用计数为0则会被gc回收.标记删除可以解决循环引用的问题.分代:0代--年轻代:1 ...

  5. 使用DBCA工具创建自己的数据库

    ylbtech-Oracle:使用DBCA工具创建自己的数据库  DBCA创建数据库 默认安装的Oracle数据库一般不能满足实际应用的需求,例如数据库名称.数据库块的大小等都需要修改,那么我们应该自 ...

  6. [11] 楔形体(Wedge)图形的生成算法

    顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...

  7. 科幻大片中那些牛X代码真相

    在<黑客帝国>中,救世主Neo的队友通过屏幕上"1"和"0"构成的数据流,就能看到鲜活的画面,这应该算是科幻大片中对代码最极致的表现了.其他科幻电影 ...

  8. 通过小实例谈谈javascript的间隔调用和延时调用

    用 setInterval方法可以以指定的间隔实现循环调用函数,直到clearInterval方法取消循环 用clearInterval方法取消循环时,必须将setInterval方法的调用赋值给一个 ...

  9. python 读写CSV文件

    #-*- coding: UTF-8 -*- import csv import os def WriteToCsv(): '''写CSV文件''' titls = ['序号', '链接', '备注' ...

  10. MySQL 动态sql语句运行 用时间做表名

    1. 描写叙述 在使用数据的时候,我时候我们须要非常多数据库,并且想用时间来做表名以区分.可是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比方,有一个表我们想以"2015-07 ...