转载自:http://blog.csdn.net/sp308036654/article/details/50638348

<input type="text" class="time hotelDepartrue" datefmt="yyyy-MM-dd" onchange="checkDate('endDate')"/>
1:找到dwz.datepicker.js文件
2:在下面的文件中,把红色的部分添加进去
/**
 * reference dwz.util.date.js
 * @author ZhangHuihua@msn.com
 * 
 */
(function($){
    $.setRegional("datepicker", {
        dayNames:['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        monthNames:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    });
 
    $.fn.datepicker = function(opts){
        var setting = {
            box$:"#calendar",
            year$:"#calendar [name=year]", month$:"#calendar [name=month]",
            tmInputs$:"#calendar .time :text", hour$:"#calendar .time .hh", minute$:"#calendar .time .mm", second$:"#calendar .time .ss",
            tmBox$:"#calendar .tm", tmUp$:"#calendar .time .up", tmDown$:"#calendar .time .down",
            close$:"#calendar .close", calIcon$:"a.inputDateButton",
            main$:"#calendar .main", days$:"#calendar .days", dayNames$:"#calendar .dayNames",
            clearBut$:"#calendar .clearBut", okBut$:"#calendar .okBut"
        };
 
        function changeTmMenu(sltClass){
            var $tm = $(setting.tmBox$);
            $tm.removeClass("hh").removeClass("mm").removeClass("ss");
            if (sltClass) {
                $tm.addClass(sltClass);
                $(setting.tmInputs$).removeClass("slt").filter("." + sltClass).addClass("slt");
            }
        }
        function clickTmMenu($input, type){
            $(setting.tmBox$).find("."+type+" li").each(function(){
                var $li = $(this);
                $li.click(function(){
                    $input.val($li.text());
                });
            });
        }
        function keydownInt(e){
            if (!((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode == DWZ.keyCode.DELETE || e.keyCode == DWZ.keyCode.BACKSPACE))) { return false; }
        }
        function changeTm($input, type){
            var ivalue = parseInt($input.val()), istart = parseInt($input.attr("start")) || 0, iend = parseInt($input.attr("end"));
            var istep = parseInt($input.attr('step') || 1);
            if (type == 1) {
                if (ivalue <= iend-istep){$input.val(ivalue + istep);}
            } else if (type == -1){
                if (ivalue >= istart+istep){$input.val(ivalue - istep);}
            } else if (ivalue > iend) {
                $input.val(iend);
            } else if (ivalue < istart) {
                $input.val(istart);
            }
        }
 
        return this.each(function(){
            var $this = $(this);
            var dp = new Datepicker($this.val(), opts);
 
            function generateCalendar(dp){
                var dw = dp.getDateWrap();
                var minDate = dp.getMinDate();
                var maxDate = dp.getMaxDate();
 
                var monthStart = new Date(dw.year,dw.month-1,1);
                var startDay = monthStart.getDay();
                var dayStr="";
                if (startDay > 0){
                    monthStart.setMonth(monthStart.getMonth() - 1);
                    var prevDateWrap = dp.getDateWrap(monthStart);
                    for(var t=prevDateWrap.days-startDay+1;t<=prevDateWrap.days;t++) {
                        var _date = new Date(dw.year,dw.month-2,t);
                        var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
                        dayStr+='<dd class="other '+_ctrClass+'" chMonth="-1" day="' + t + '">'+t+'</dd>';
                    }
                }
                for(var t=1;t<=dw.days;t++){
                    var _date = new Date(dw.year,dw.month-1,t);
                    var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
                    if(t==dw.day){
                        dayStr+='<dd class="slt '+_ctrClass+'" day="' + t + '">'+t+'</dd>';
                    }else{
                        dayStr+='<dd class="'+_ctrClass+'" day="' + t + '">'+t+'</dd>';
                    }
                }
                for(var t=1;t<=42-startDay-dw.days;t++){
                    var _date = new Date(dw.year,dw.month,t);
                    var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
                    dayStr+='<dd class="other '+_ctrClass+'" chMonth="1" day="' + t + '">'+t+'</dd>';
                }
 
                var $days = $(setting.days$).html(dayStr).find("dd");
                $days.not('.disabled').click(function(){
                    var $day = $(this);
 
                    if (!dp.hasTime()) {
                        $this.val(dp.formatDate(dp.changeDay($day.attr("day"), $day.attr("chMonth"))));
                        // 添加监听日期改变(PineTree添加)
                        $this.change();
                        closeCalendar(); 
                    } else {
                        $days.removeClass("slt");
                        $day.addClass("slt");
                    }
                });
 
                if (!dp.hasDate()) $(setting.main$).addClass('nodate'); // 仅时间,无日期
 
                if (dp.hasTime()) {
                    $("#calendar .time").show();
 
                    var $hour = $(setting.hour$).val(dw.hour).focus(function(){
                        changeTmMenu("hh");
                    });
                    var iMinute = parseInt(dw.minute / dp.opts.mmStep) * dp.opts.mmStep;
                    var $minute = $(setting.minute$).val(iMinute).attr('step',dp.opts.mmStep).focus(function(){
                        changeTmMenu("mm");
                    });
                    var $second = $(setting.second$).val(dp.hasSecond() ? dw.second : 0).attr('step',dp.opts.ssStep).focus(function(){
                        changeTmMenu("ss");
                    });
 
                    $hour.add($minute).add($second).click(function(){return false});
 
                    clickTmMenu($hour,"hh");
                    clickTmMenu($minute,"mm");
                    clickTmMenu($second,"ss");
                    $(setting.box$).click(function(){
                        changeTmMenu();
                    });
 
                    var $inputs = $(setting.tmInputs$);
                    $inputs.keydown(keydownInt).each(function(){
                        var $input = $(this);
                        $input.keyup(function(){
                            changeTm($input, 0);
                        });
                    });
                    $(setting.tmUp$).click(function(){
                        $inputs.filter(".slt").each(function(){
                            changeTm($(this), 1);
                        });
                    });
                    $(setting.tmDown$).click(function(){
                        $inputs.filter(".slt").each(function(){
                            changeTm($(this), -1);
                        });
                    });
 
                    if (!dp.hasHour()) $hour.attr("disabled",true);
                    if (!dp.hasMinute()) $minute.attr("disabled",true);
                    if (!dp.hasSecond()) $second.attr("disabled",true);
                }
 
            }
 
            function closeCalendar() {
                $(setting.box$).remove();
                $(document).unbind("click", closeCalendar);
            }
 
            $this.click(function(event){
                closeCalendar();
                var dp = new Datepicker($this.val(), opts);
                var offset = $this.offset();
                var iTop = offset.top+this.offsetHeight;
                $(DWZ.frag['calendarFrag']).appendTo("body").css({
                    left:offset.left+'px',
                    top:iTop+'px'
                }).show().click(function(event){
                    event.stopPropagation();
                });
 
                ($.fn.bgiframe && $(setting.box$).bgiframe());
 
                var dayNames = "";
                $.each($.regional.datepicker.dayNames, function(i,v){
                    dayNames += "<dt>" + v + "</dt>"
                });
                $(setting.dayNames$).html(dayNames);
 
                var dw = dp.getDateWrap();
                var $year = $(setting.year$);
                var yearstart = dp.getMinDate().getFullYear();
                var yearend = dp.getMaxDate().getFullYear();
                for(y=yearstart; y<=yearend; y++){
                    $year.append('<option value="'+ y +'"'+ (dw.year==y ? 'selected="selected"' : '') +'>'+ y +'</option>');
                }
                var $month = $(setting.month$);
                $.each($.regional.datepicker.monthNames, function(i,v){
                    var m = i+1;
                    $month.append('<option value="'+ m +'"'+ (dw.month==m ? 'selected="selected"' : '') +'>'+ v +'</option>');
                });
 
                // generate calendar
                generateCalendar(dp);
                $year.add($month).change(function(){
                    dp.changeDate($year.val(), $month.val());
                    generateCalendar(dp);
                });
 
                // fix top
                var iBoxH = $(setting.box$).outerHeight(true);
                if (iTop > iBoxH && iTop > $(window).height()-iBoxH) {
                    $(setting.box$).css("top", offset.top - iBoxH);
                }
 
                $(setting.close$).click(function(){
                    closeCalendar();
                });
                $(setting.clearBut$).click(function(){
                    $this.val("");
                    closeCalendar();
                    // 添加日期改变监听(PineTree添加)
                    $this.change();
                });
                $(setting.okBut$).click(function(){
                    var $dd = $(setting.days$).find("dd.slt");
 
                    if ($dd.hasClass("disabled")) return false;
 
                    var date = dp.changeDay($dd.attr("day"), $dd.attr("chMonth"));
 
                    if (dp.hasTime()) {
                         date.setHours(parseInt($(setting.hour$).val()));
                        date.setMinutes(parseInt($(setting.minute$).val()));
                        date.setSeconds(parseInt($(setting.second$).val()));
                    }
 
                    $this.val(dp.formatDate(date));
                    closeCalendar();
                    // 添加日期改变监听(PineTree添加)
                    $this.change();
                });
                $(document).bind("click", closeCalendar);
                return false;
            });
 
            $this.parent().find(setting.calIcon$).click(function(){
                $this.trigger("click");
                return false;
            });
        });
 
    }
 
    var Datepicker = function(sDate, opts) {
        this.opts = $.extend({
            pattern:'yyyy-MM-dd',
            minDate:"1900-01-01",
            maxDate:"2099-12-31",
            mmStep:1,
            ssStep:1
        }, opts);
 
        //动态minDate、maxDate
        var now = new Date();
        this.opts.minDate = now.formatDateTm(this.opts.minDate);
        this.opts.maxDate = now.formatDateTm(this.opts.maxDate);
 
        this.sDate = sDate.trim();
    }
 
    $.extend(Datepicker.prototype, {
        get: function(name) {
            return this.opts[name];
        },
        _getDays: function (y,m){//获取某年某月的天数
 
            return m==2?(y%4||!(y%100)&&y%400?28:29):(/4|6|9|11/.test(m)?30:31);
        },
 
        _minMaxDate: function(sDate){
            var _count = sDate.split('-').length -1;
            var _format = 'y-M-d';
            if (_count == 1) _format = 'y-M';
            else if (_count == 0) _format = 'y';
 
            return sDate.parseDate(_format);
        },
        getMinDate: function(){
            return this._minMaxDate(this.opts.minDate);
        },
        getMaxDate: function(){
            var _sDate = this.opts.maxDate;
            var _count = _sDate.split('-').length -1;
            var _date = this._minMaxDate(_sDate);
 
            if (_count < 2) { //format:y-M、y
 
                var _day = this._getDays(_date.getFullYear(), _date.getMonth()+1);
                _date.setDate(_day);
                if (_count == 0) {//format:y
 
                    _date.setMonth(11);
                }
            }
 
            return _date;
        },
        getDateWrap: function(date){ //得到年,月,日
 
            if (!date) date = this.parseDate(this.sDate) || new Date();
            var y = date.getFullYear();
            var m = date.getMonth()+1;
            var days = this._getDays(y,m);
            return {
                year:y, month:m, day:date.getDate(),
                hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds(),
                days: days, date:date
            }
        },
        /**
         * @param {year:2010, month:05, day:24}
         */
        changeDate: function(y, m, d){
            var date = new Date(y, m - 1, d || 1);
            this.sDate = this.formatDate(date);
            return date;
        },
        changeDay: function(day, chMonth){
            if (!chMonth) chMonth = 0;
            var dw = this.getDateWrap();
            return this.changeDate(dw.year, dw.month+parseInt(chMonth), day);
        },
        parseDate: function(sDate){
            if (!sDate) return null;
            return sDate.parseDate(this.opts.pattern);
        },
        formatDate: function(date){
            return date.formatDate(this.opts.pattern);
        },
        hasHour: function() {
            return this.opts.pattern.indexOf("H") != -1;
        },
        hasMinute: function() {
            return this.opts.pattern.indexOf("m") != -1;
        },
        hasSecond: function() {
            return this.opts.pattern.indexOf("s") != -1;
        },
        hasTime: function() {
            return this.hasHour() || this.hasMinute() || this.hasSecond();
        },
        hasDate: function() {
            var _dateKeys = ['y','M','d','E'];
            for (var i=0; i<_dateKeys.length; i++){
                if (this.opts.pattern.indexOf(_dateKeys[i]) != -1) return true;
            }
 
            return false;
        }
    });
})(jQuery);

dwz监听日期变化,dwz日期控件onchange不起作用,dwz框架时间控件不支持onchange事件的更多相关文章

  1. Angular.js中使用$watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  2. $scope.$watch()——监听数据变化

    $scope.$watch(watchFn, watchAction, [deepWatch]):监听数据变化,三个参数 --watchFn:监听的对象,一个带有Angular 表达式或者函数的字符串 ...

  3. 如何使用NodeJs来监听文件变化

    1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工 ...

  4. android动态注册监听网络变化异常

    在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.A ...

  5. Android 监听网络变化

    Android 监听网络变化

  6. --@angularJS--$scope.watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  7. vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化

    一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...

  8. webview缓存及跳转时截取url地址、监听页面变化

    缓存及一些设定 我在做一些项目时,h5做的项目手机浏览器能使用,但是在搬到webview时候不能用,这个时候通过查阅资料,原来是webview没有设定好,包括缓存.缓存大小及路径等等 mWebview ...

  9. 对于单页应用中如何监听 URL 变化的思考

    周末开发了一个在 GitHub 中给 repo 增加自定义备注的 chrome 扩展. 开发这个扩展的原因是我在 GitHub 中所 star 的项目实在太多了(截止目前 671 个),有的项目过个几 ...

  10. js动态监听dom变化

    原生js 动态监听dom变化,根据不同的类型绑定不同的处理逻辑 // Firefox和Chrome早期版本中带有前缀   var MutationObserver = window.MutationO ...

随机推荐

  1. Testng优势

    选择Testng的理由: 1.可指定执行顺序, dependsOnMethods 属性来应对测试的依赖性问题. 2.·参数化1:轻轻松松从XML中得到参数 @BeforeClass public vo ...

  2. 公共的Json操作类

    using System; using System.Data; using System.Text; using System.Collections.Generic; using System.R ...

  3. flash Timer 性能优化,每几秒间隔一次

    timer.stop后timer.currentCount没有重置,timer.reset后,currentCount重置了. package game.mananger { import flash ...

  4. dell R730 安装windwos 2008 R2在windows loading files...完成后屏幕无信号(iDrac绿屏)

    dell R730 安装windwos 2008 R2在windows loading files...完成后,Starting Windows时屏幕无信号(iDrac绿屏) 解决方法: F2  进行 ...

  5. (接上一条)解决ssh隧道断开自动重连的问题

    Sounds like you need autossh. This will monitor an ssh tunnel and restart it as needed. http://www.d ...

  6. VS2017新建windows控制台程序打印中文乱码问题

    最近刚换上VS2017,由于手头又要做个MFC的程序,所以写控制台程序做功能测试,然后发现居然乱码了. 于是用VS2017新建windows控制台应用程序,在main函数种加一句printf(&quo ...

  7. NOIP2013 Day2

    1.积木大赛 https://www.luogu.org/problemnew/show/1969 这道题在考试时暴力得比较麻烦,导致只得了80分,t了两个点. 思路为寻找一个区间内高度大于0的最低点 ...

  8. (转)为C# Windows服务添加安装程序

    本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻 ...

  9. 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)

    操作系统 解释堆和栈的区别. 分配在堆的内存与分配在堆栈的内存有什么不同 分配在堆的内存要手动去释放 线程与进程的区别 多线程中栈与堆是公有的还是私有的 在多线程环境下,每个线程拥有一个栈和一个程序计 ...

  10. bat文件

    bat文件是dos下的批处理文件.批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用cm ...