日历控件最后一弹——JQuery实现,换汤不换药。原理一模一样,换了种实现工具。关于日历的终于写完了,接下来研究研究nodejs。嗯,近期就这点事了。

同样还是将input的id设置成calendar就可以使用这个控件了。

<input id="calendar" type="text" />

当然别忘了引用jquery库,必须在引用这个控件之前引用jquery库。

calendar_jquery.js源代码:

// JavaScript Document
$(document).ready(function(e) { var days = new Array("日","一","二","三","四","五","六");//星期
var today = new Date();//当天日期,备用
var month_big = new Array("1","3","5","7","8","10","12"); //包含所有大月的数组
var month_small = new Array("4","6","9","11"); //包含所有小月的数组
var separator = "-";//间隔符 var cal_width = ($("#calendar").width() < 150)?150:$("#calendar").width();
var cal_height = $("#calendar").height();
var cal_X = $("#calendar").offset().left;
var cal_Y = $("#calendar").offset().top;
var pane_height = cal_width/7 - 1; $("#calendar").attr("readOnly","readOnly");
$("#calendar").css("cursor","pointer");
$("#calendar").bind("click",showCalendar);
$("#calendar").bind("focusout",hideCalendar); function hideCalendar(){
if($("#cal_body").length > 0){
$("#cal_body").remove();
}
} function showCalendar(){
if($("#cal_body").length > 0){
$("#cal_body").remove();
}
else{
var cal_body = $("<div></div>");
cal_body.attr("id","cal_body");
cal_body.css("position","absolute");
cal_body.css("z-index",10);
cal_body.offset({top:cal_Y + cal_height + 5,left:cal_X});
cal_body.width(cal_width + 1);
cal_body.height("auto");//auto
cal_body.css("overflow","hidden");
cal_body.css("border","solid 1px #CCC");
cal_body.mouseenter(function(e) {
$("#calendar").unbind("focusout");
});
cal_body.mouseleave(function(e) {
$("#calendar").focus();
$("#calendar").bind("focusout",hideCalendar);
});
$("#calendar").parent().append(cal_body); var line1 = $("<div></div>");
line1.width("100%");
line1.height(pane_height);
line1.css("background-color","#0FF"); var btn1 = $("<div></div>");
btn1.width(cal_width/3 - 3);
btn1.height(pane_height);
btn1.css("line-height",pane_height + "px");
btn1.css("text-align","center");
btn1.text("<");
btn1.css("float","left");
btn1.css("cursor","pointer");
btn1.click(function(e) {
if(isValidated()){
var old_year = parseInt($("#input_year").val());
if(old_year > 1960){
var year = old_year - 1;
var month = parseInt($("#input_month").val());
var val = year + separator + month + separator + 1;
init(val);
}
}
});
line1.append(btn1); var input_year = $("<input />");
input_year.attr("id","input_year");
input_year.width(cal_width/3);
input_year.height("70%");
input_year.css("float","left");
input_year.css("text-align","center");
input_year.bind("change",changed);
line1.append(input_year); var btn2 = $("<div></div>");
btn2.width(cal_width/3 - 3);
btn2.height(pane_height);
btn2.css("line-height",pane_height + "px");
btn2.css("text-align","center");
btn2.text(">");
btn2.css("float","left");
btn2.css("cursor","pointer");
btn2.click(function(e) {
if(isValidated()){
var old_year = parseInt($("#input_year").val());
if(old_year < 2050){
var year = old_year + 1;
var month = parseInt($("#input_month").val());
var val = year + separator + month + separator + 1;
init(val);
}
}
});
line1.append(btn2); var line2 = $("<div></div>");
line2.width("100%");
line2.height(pane_height);
line2.css("background-color","#0FF"); var btn3 = $("<div></div>");
btn3.width(cal_width/3 - 3);
btn3.height(pane_height);
btn3.css("line-height",pane_height + "px");
btn3.css("text-align","center");
btn3.text("<");
btn3.css("float","left");
btn3.css("cursor","pointer");
btn3.click(function(e) {
if(isValidated()){
var old_month = parseInt($("#input_month").val());
if(old_month > 1){
var year = parseInt($("#input_year").val());
var month = old_month - 1;
var val = year + separator + month + separator + 1;
init(val);
}
else {
var year = parseInt($("#input_year").val()) - 1;
var month = 12;
var val = year + separator + month + separator + 1;
init(val);
}
}
});
line2.append(btn3); var input_month = $("<input />");
input_month.attr("id","input_month");
input_month.width(cal_width/3);
input_month.height("70%");
input_month.css("float","left");
input_month.css("text-align","center");
input_month.bind("change",changed);
line2.append(input_month); var btn4 = $("<div></div>");
btn4.width(cal_width/3 - 3);
btn4.height(pane_height);
btn4.css("line-height",pane_height + "px");
btn4.css("text-align","center");
btn4.text(">");
btn4.css("float","left");
btn4.css("cursor","pointer");
btn4.click(function(e) {
if(isValidated()){
var old_month = parseInt($("#input_month").val());
if(old_month < 12){
var year = parseInt($("#input_year").val());
var month = parseInt($("#input_month").val()) + 1;
var val = year + separator + month + separator + 1;
init(val);
}
else {
var year = parseInt($("#input_year").val()) + 1;
var month = 1;
var val = year + separator + month + separator + 1;
init(val);
}
}
});
line2.append(btn4); cal_body.append(line1);
cal_body.append(line2); for(var i=0;i<7;i++){
var pane = $("<div></div>");
pane.addClass("pane");
pane.width(pane_height);
pane.height(pane_height);
pane.css("line-height",pane_height + "px");
pane.css("float","left");
pane.css("text-align","center");
pane.text(days[i]);
cal_body.append(pane);
} init($("#calendar").val());
}
} function init(val){
clearPane(); var temp_date;
var year;
var month;
var date; if(val == ""){
temp_date = today;
$("#calendar").val(today.toFormatString(separator));
}
else{
year = val.year();
month = val.month(separator);
date = val.date(separator);
temp_date = new Date(year,month,date);
} year = temp_date.getFullYear();
month = temp_date.getMonth() + 1;
date = temp_date.getDate();
temp_date.setDate(1); var start = temp_date.getDay() + 7;
var end; if(array_contain(month_big, month)){
end = start + 31;
}
else if(array_contain(month_small, month)){
end = start + 30;
}
else{
if(isLeapYear(year)){
end = start + 29;
}
else{
end = start + 28;
}
} for(var i = 7; i < start; i++){ var pane = $("<div></div>");
pane.addClass("pane");
pane.width(pane_height);
pane.height(pane_height);
pane.css("line-height",pane_height + "px");
pane.css("float","left");
pane.css("text-align","center");
$("#cal_body").append(pane);
} for(var i = start; i < end; i++){
var pane = $("<div></div>");
pane.addClass("pane");
pane.width(pane_height);
pane.height(pane_height);
pane.css("line-height",pane_height + "px");
pane.css("float","left");
pane.css("text-align","center");
pane.text(i - start + 1);
pane.css("cursor","pointer");
pane.mouseover(function(e) {
$(this).css("background-color","#0FF");
});
if(date == (i - start + 1))
pane.css("background-color","#0FF");
else{
pane.mouseleave(function(e) {
$(this).css("background-color","");
});
}
pane.click(function(){
$("#calendar").val(year + separator + month + separator + $(this).text());
$("#cal_body").remove();
});
$("#cal_body").append(pane); $("#input_year").val(year);
$("#input_month").val(month);
}
} //格式化输出
Date.prototype.toFormatString = function(separator){
var result = this.getFullYear() + separator + (this.getMonth() + 1) + separator + this.getDate();
return result;
}; //从格式化字符串中获取年份
String.prototype.year = function(){
var str = this.substring(0,4);
return str;
}; //从格式化字符串中获取月份
String.prototype.month = function(separator){
var start = this.indexOf(separator) + 1;
var end = this.lastIndexOf(separator);
return parseInt(this.substring(start, end)) - 1;
}; //从格式化字符串中获取日期
String.prototype.date = function(separator){
var start = this.lastIndexOf(separator) + 1;
return this.substring(start);
}; //判断数组array中是否包含元素obj的函数,包含则返回true,不包含则返回false
function array_contain(array, obj){
for (var i = 0; i < array.length; i++){
if (array[i] == obj)
return true;
}
return false;
} //判断年份year是否为闰年,是闰年则返回true,否则返回false
function isLeapYear(year){
var a = year % 4;
var b = year % 100;
var c = year % 400;
if( ( (a == 0) && (b != 0) ) || (c == 0) ){
return true;
}
return false;
} //清除方格
function clearPane(){
var limit = $(".pane").length;
for(var i=7; i < limit; i++){
$(".pane").eq(7).remove();
}
} //判断输入是否合法
function isValidated(){
var year = $("#input_year").val();
var month = $("#input_month").val();
if(isNaN(year) || isNaN(month)){
alert("请输入正确的年份/月份");
return false;
}
else{
if(year%1 != 0 || month%1 != 0){
alert("请输入正确的年份/月份");
return false;
}
else{
year = parseInt(year);
if(year < 1960 || year > 2050){
alert("请输入1960~2050之间的年份!");
return false;
}
else if(month < 1 || month >12){
alert("请输入正确的月份!");
return false;
}
else{
return true;
}
}
}
} //年份月份发生变化时处理函数
function changed(){
if(isValidated()){
var year = $("#input_year").val();
var month = $("#input_month").val();
var val = year + separator + month + separator + 1;
init(val);
}
}
});

JQuery日历控件的更多相关文章

  1. jQuery 日历控件 FullCalendar 初识

    最近有个日程管理的需求,就学习了一下 FullCalendar 控件的一些基本知识,本文不是详细介绍该控件的 API 的文档,而是记录本人使用过程中的一些学习情况. 先看一下效果图  月/周/日视图 ...

  2. 仿微博的JQuery日历控件

    实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数. 日历控件网上一搜一大把,但是我觉得自己写一遍还是有好处的.代码可以查看本页源代 ...

  3. 前端jQuery日历控件报错 $("#datepicker").datepicker is not a function

    使用日历控件时,前端产生错误: $("#datepicker").datepicker is not a function 问题原因 前端在同一个页面,jQuery引入了两次. 解 ...

  4. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  5. jquery插件——日历控件

    今天在网上有看到一个jquery插件——日历控件,不过之前也在柯乐义的网站上看到了(http://keleyi.com/ 推荐下) 这个插件看着比较大气,所以干脆也分享下,以后自己也好用一点儿 1.页 ...

  6. .net mvc页面UI之Jquery博客日历控件

    摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...

  7. javascript日历控件

    以前要用到日历控件都是直接从网上下载一套源码来使用,心里一直有个梗,就是想自己动手写一个日历控件,最近刚好来了兴趣,时间上也允许,于是自己摸索写了一个,功能还算完善,界面就凑合了.可能最值得说的一点就 ...

  8. 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”

    接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...

  9. javascript实例学习之六—自定义日历控件

    基于之前上篇博客轻量级jquery,tool.js和base.js.自定义开发的base_datePicker插件,效果类似于jquery_ui的datePicker插件 //基于Base.js以及t ...

随机推荐

  1. 放养的小爬虫--京东定向爬虫(AJAX获取价格数据)

    放养的小爬虫--京东定向爬虫(AJAX获取价格数据) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wang/Sp ...

  2. 初识nginx之第一个demo

    商城项目做了一个多月了,想到必须用到负载均衡,简单了解了一下nginx,首先分享第一个demo,五月份上线后,会继续分享一系列相关知识. 在nginx根目录下,用了一个园友的批处理文件nginx.ba ...

  3. 扩展lamda表达中distinct按照字段去除重复

    首先,我们定义一个Student类来测试. public class Student { public int ID { get; set; } public string Name { get; s ...

  4. Spring.Net简单用法

    Spring.Net其实就是抽象工厂,只不过更加灵活强大,性能上并没有明显的区别. 它帮我们实现了控制反转. 其有两种依赖注入方式. 第一:属性注入 第二:构造函数注入 首先,我们去  Spring. ...

  5. Java中,包的概念、常量、静态成员、继承

    新建包:左上角-新建-包 命名规则(通常从大到小,方便整合不容易冲突)  例如:com.itnba.maya.test package必须在最顶行,之前不能再有其他代码 使用包: 快捷方式:使用包中的 ...

  6. 22、ASP.NET MVC入门到精通——搭建项目框架

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 前面的章节,说了ASP.NET MVC项目中常用的一些技术和知识点,更多的是理论上面的东西,接下来,我将通过一个简单的OA项目来应用我们之前 ...

  7. Easticsearch通信方式_API

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch概念 a. Elasticsearch是一个基于Luc ...

  8. JavaEE中Web服务器、Web容器、Application服务器区别及联系

    在JavaEE 开发Web中,我们经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server),等容易混淆不好理解名词. ...

  9. jquery.datatables中文语言设置

    /* * sErrMode * 错误信息显示方式 * 分别为alert和throw,默认为alert */ "sErrMode": "throw", /* * ...

  10. Android开发1:基本UI界面设计——布局和组件

    前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望 ...