JQuery日历控件

日历控件最后一弹——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);
        }
    }
});
时间: 2024-10-12 17:58:30

JQuery日历控件的相关文章

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

一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看看效果图吧 效果图很简单,代码封装在JQuery中,网页端只需要要调用即可: 二.Jquery自定义实体对象 Jquery可以自定义函数function,有没有可以定义实体对象,里面封装方法那?查询了一下资料发现,是可以的,不仅能够封装属性,还可以写自己的方法,调用模板代码如下: $.Calende

jquery M97-datepicker日历控件

My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 2.在页面中引入该组件js文件:     <script type="text/javascript" src="My97DatePicker/WdatePicker.js"></script> 3.页面使用两个方式:     常规调用:  <input id="d11" type="tex

JavaScript弹出式日历控件 无jquery

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" cont

JS日历控件 灵活设置: 精确的时分秒.

在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时只支持 年月日 的日历控件,现在优化如下: 1. 在原基础上 支持 yyyy-mm-dd 的年月日的控件. 2. 在原基础上增加支持 yyyy-mm-dd HH:MM 年月日时分的控件. 3. 在原基础上增加支持 yyyy-mm-dd HH:MM:SS 年月日时分秒的控件. 4. 增加确定按钮 及 今天 和关闭按钮.当我切换到其他年份的时候,我点击 "今天"按钮 就可以返回当前的年月份. 配置项如下:

多年前自创的一个网页日历控件

现在框架流行,很多常用网页控件都开发好了供人调用,如JQuery的Calendar,美观方便. 多年前我也自己闭门造车弄出个日历控件,再用在哪里已然是不可能,权且当做老照片挂起来,有空凭吊一下. 下载地址在: http://pan.baidu.com/s/1sjuLD17 下载下来是个JavaWeb工程,放Tomcat里就可以使用的.(为什么要弄个Web工程而不是html包,因为include在html里面不好用.) 日历控件代码和图片都在WebRoot下的calendar目录里. WebRoo

javascript日历控件

以前要用到日历控件都是直接从网上下载一套源码来使用,心里一直有个梗,就是想自己动手写一个日历控件,最近刚好来了兴趣,时间上也允许,于是自己摸索写了一个,功能还算完善,界面就凑合了.可能最值得说的一点就是让input控件内部右边显示一个按钮,我是直接给input加了个背景,然后把input的边框去掉实现的. 这个是最初版的,再往后打算做出纯javascript版的,再往后打算用JQuery做一套. <!doctype html> <html> <head> <met

fullcalendar日历控件知识点集合

1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方法.托付(函数回调)作为成员变量.通过为这些成员变量赋值,就可以实例化出一个符合自己需求的fullcalendar实例出来,即终于在浏览器里渲染出的日历.换句话说,我们所做的绝大多数工作就是依照fullcalendar的语法约定去配置出一个符合我们需求的fullcalendar实例.除非对于极少的特

js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js

日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https://fullcalendar.io/docs/event_data/Event_Object/ https://fullcalendar.io/docs/mouse/eventClick/ <!DOCTYPE html> <html> <head> <meta char

前端日历控件推荐

1.淘宝旅行YUI通用日期日历控件:http://www.xwcms.net/webAnnexImages/fileAnnex/20140222/40702/index.html 2.jquery中文日历插件date_input.pack:http://www.wufangbo.com/demo/jquery/29/index.html 3. layDate:http://sentsin.com/layui/laydate/