JavaScript-自制日历控件(只选择年月)
<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%"> </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;"><<</span>';
str += '<span>请选择年份</span>';
str += '<span onclick="Canlender.getYearTds(' + (Canlender.page + 1) + ')" style="padding-left: 20px; cursor: pointer;">>></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-自制日历控件(只选择年月)的更多相关文章
- vue日历控件,自定义选择年月 选择年月日 选择年月日时 选择年月日时分,自定义日期范围
下载地址:https://pan.baidu.com/s/1iEZl4kDkEg4ybwqc7aI7vQ 注:功能更加全面的日历控件请访问:https://www.cnblogs.com/mrzhu/ ...
- bootstrap的datetimepicker控件只选择年月的配置
<script src="{% static "jquery/jquery-1.11.3.min.js" %}"></script> & ...
- javaScript实现日历控件
近期学习js.闲来无事就写了个简单的日历控件.不知道别人是怎么实现的.纯粹自己想法写的, 写的不好 ,但能够起到抛砖引玉的作用. 先来看效果. watermark/2/text/aHR0cDovL2J ...
- zui框架配置日期控件只显示年月
zui框架配置日期控件datetimepicker只显示年月 <!DOCTYPE html> <head> <script src="~/Scripts/jqu ...
- ExtJs4.0日期控件只显示年月按年月格式会跳月的解决办法
如果是Ext.form.panel的话,只要设置一下属性就可以.如下代码: { text : '期间', width : 80, sortable : true, dataIndex : 'accou ...
- WPF DatePicker日期控件只显示年月
1.需要引用2个类,第一个类DatePickerCalendar public class DatePickerCalendar { public static readonly Dependency ...
- layui日历控件设置选择日期不能超过当前日期
layui.use('laydate', function() { var laydate = layui.laydate; laydate.render({ elem : '#begin', max ...
- mvc 日历控件
第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...
- WdatePicker日历控件动态设置属性参数值
首先吐槽一下需求人员给了我一个很坑的需求:WdatePicker日历控件里面选择的最小时间(minDate)的值是级联动态改变的,而且这个值要从数据库获取,这样子只能使用 ajax 来发起请求获取mi ...
随机推荐
- django的单元测试框架unittest、覆盖率
django的单元测试 指定测试范围: 指定运行某些测试文件./manage.py test --pattern="tests_*.py" -v 2 运行所有测试文件./manag ...
- 请教如何改善C#中socket通信机客户端程序的健壮性
我是做Socket的新手,最近做了一个Socket客户端程序,连接Server的时候,如果server存在,并且允许连接的话,程序无错,正常执行:但是如果Server不存在,或者拒绝连接,程序就会卡住 ...
- 利用WebClient实现对Http协议的Post和Get对网站进行模拟登陆和浏览
我们在一些场合经常需要模拟浏览器进行一些操作,比如模拟投票,或者模拟点击,或者Web游戏外挂.而C#中封装好的WebClient可以在某些要求不算搞的场景实现Http的Post和Get.具体请见代码: ...
- Android -- VelocityTracker
VelocityTracker 主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出当前的速度. 方法 //获取一个VelocityTracker对象, 用完 ...
- Android -- ViewPager放入多个XML监听每个的控件
我这这里就用了两个imageButton的监听器,两个XML上分别一个. 昨天做了个Viewpager,今天想试试在上面弄上Button试试,结果,弄不来,然后查文档,没查到...百度了1个多小时才出 ...
- (转)<Unity3D>Unity3D在android下调试
转自:http://blog.csdn.net/zuoyamin/article/details/11827309 一.工具准备 1.JDK——由于android是基于Java平台开发的,jdk是必须 ...
- Linux shell 脚本入门教程+实例
原文:http://www.wiquan.com/article/136 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工具.She ...
- Linux随笔(安装ftp,安装jdk,安装 tomcat,安装redis,安装MySQL,安装svn)
su: authentication failure 解决办法:sudo passwd root 更改密码即可 确认虚拟机用到的联网方式是桥接模式,不然Windows是ping不通Linux的,确保 ...
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(六)
. #include <stdio.h> . #include <time.h> . #include <ctype.h> . #include <stdli ...
- 【ACM】杭电ACM题一直WA求高手看看代码
数据测试了好几个都没问题,可以就是WA不让过,检测了2个小时还是没发现有什么问题T_T!!求高手看看代码,小弟在此谢谢各位哦! #include <stdio.h> #include &l ...