日期控件封装

/**
 * Created by joan on 16/10/12.
 */
var $ = require(‘jquery‘),
    Calendar = require(‘hermes-calendar‘);

/**
 * html 示例如下
 * <div class="jui-form-item J_timeFormItem">
 *      <label class="jui-input-label"><span class="jui-label-required">时间</span></label>
 *      <span class="time-descripte fn-mr5">从:</span><input readonly="readonly" placeholder="2015-10-02 09:12" type="text" class="jui-input" name=‘startTime‘ id="J_startTime" value="$!servicePromotionVO.startTimeStr">
 *      <span class="time-descripte fn-ml5 fn-mr5">至:</span><input readonly="readonly" placeholder="2015-10-10 19:21" type="text" class="jui-input" name=‘endTime‘ id="J_endTime" value="$!servicePromotionVO.endTimeStr">
 *      <div class="jui-form-tip J_timeTip ft-error">
 *      </div>
 *</div>
 *
 * 调用方式
 * newCalendar.init({
 *       errorItem : $(‘.ft-error‘), //控件展示错误提示信息的区域
 *       juiFormItem : $(‘.J_timeFormItem‘), //控件jui-form-item节点
 *       startTime : $(‘#J_startTime‘).val(), //开始时间
 *       endTime : $(‘#J_endTime‘).val() //结束时间
 * });
 *
 * 对象包含如下方法
 * @type {{init: newCalendar.init, showErr: newCalendar.showErr, hideErr: newCalendar.hideErr, initCalendar: newCalendar.initCalendar, getNowTime: newCalendar.getNowTime, checkTime: newCalendar.checkTime}}
 */
var newCalendar = {
    init:function(params){
        this.initCalendar(params);//初始化Canlendar
    },
    /**
     * 校验错误信息展示
     * @param errorItem {Object Object}[错误信息dom节点]
     * @param juiFormItem {Object Object}[控件item]
     * @param err {Object String}[错误信息字符串]
     */
    showErr:function(errorItem,juiFormItem,err){
        errorItem.html(err||‘‘);
        if(!juiFormItem.hasClass(‘jui-form-item-error‘)){
            juiFormItem.addClass(‘jui-form-item-error‘);//出错input框红色高亮显示
        }
    },
    /**
     * 校验错误信息展示
     * @param errorItem {Object Object}[错误信息dom节点]
     * @param juiFormItem {Object Object}[控件item]
     * @param err {Object String}[控件默认提示信息]
     */
    hideErr:function(errorItem,juiFormItem,err){
        errorItem.html(err||‘‘);
        if(juiFormItem.hasClass(‘jui-form-item-error‘)) {
            juiFormItem.removeClass(‘jui-form-item-error‘);//出错input框红色高亮显示
        }
    },
    /**
     * 初始化时间选择控件
     */
    initCalendar:function(params){
        var self = this,
            errorItem = params.errorItem,
            juiFormItem = params.juiFormItem,
        // 时间选择
            nowTime = self.getNowTime();

        // 开始时间
        var startCalendar = new Calendar({
            trigger: "#J_startTime",
            format: "YYYY-MM-DD HH:mm",
            range: [nowTime.date,null],
            events: {
                ‘click [data-role=confirm]‘: function(ev) {
                    var showTime = this.getTime().format(this.get(‘format‘)),
                        endTime = params.endTime;
                    this.output(showTime);
                    this.hide();
                    if(!!endTime){//存在结束时间才触发校验
                        if (!self.checkTime(params)) {
                            return;
                        }
                    }

                }
            }
        });

        // 结束时间
        var endCalendar = new Calendar({
            trigger: "#J_endTime",
            format: "YYYY-MM-DD HH:mm",
            range: [nowTime.date,null],
            events: {
                ‘click [data-role=confirm]‘: function(ev) {
                    var showTime = this.getTime().format(this.get(‘format‘)),
                        startTime = juiFormItem.startTime;
                    this.hide();
                    if(!startTime){
                        self.showErr(errorItem,juiFormItem,‘请先选择开始时间‘);
                        return;
                    }
                    this.output(showTime);
                    if (!self.checkTime(params)) {
                        return;
                    }

                }
            }
        });

        //重新设置时间选择范围
        startCalendar.on(‘selectDate‘, function (date) {
            endCalendar.range([date,null]);
        });

    },
    /** 获取当前时间
     *  @timeStr 自定义时间,格式支持时间辍或类型2015-12-12 12:38
     */
    getNowTime: function(timeStr) {
        var formatVal = function(val) {
                return val > 9 ? val : ‘0‘+val;
            },
            nowTime = timeStr ? new Date(timeStr) : new Date(),
            nowYear = nowTime.getFullYear(),
            nowMonth = formatVal(nowTime.getMonth() + 1),
            nowDate = formatVal(nowTime.getDate()),
            nowHour = formatVal(nowTime.getHours()),
            nowMin = formatVal(nowTime.getMinutes()),

        // 2016-9-28
            localeDate = nowYear+‘-‘+nowMonth+‘-‘+nowDate,

        // 12:38
            times = nowHour+‘:‘+nowMin;

        return {
            time: nowTime,
            date: localeDate,
            times: times,
            hour: nowHour,
            min: nowMin
        }
    },
    /**
     * 验证开始时间小于结束时间
     */
    checkTime: function(params) {
        var self = this,
            errorItem = params.errorItem,
            juiFormItem = params.juiFormItem,
            timeVal = function(str) {
                var result = new Date(str.replace(/-/g,‘/‘)).getTime();
                return result;
            },
            startTimeStr = params.startTime,
            startTime = timeVal(startTimeStr),
            endTimeStr = params.endTime,
            endTime = timeVal(endTimeStr);
        if (!startTime){
            self.showErr(errorItem,juiFormItem,‘请输入开始时间‘);
            return false;
        }
        if(!endTime){
            self.showErr(errorItem,juiFormItem,‘请输入结束时间‘);
            return false;
        }
        if(startTime >= endTime) {
            self.showErr(errorItem,juiFormItem,‘结束时间需大于开始时间‘);
            return false;
        }
        self.hideErr(errorItem,juiFormItem,‘‘);
        return true;
    }
}

newCalendar.init({
    errorItem : $(‘.ft-error‘), //控件展示错误提示信息的区域
    juiFormItem : $(‘.J_timeFormItem‘), //控件jui-form-item节点
    startTime : $(‘#J_startTime‘).val(), //开始时间
    endTime : $(‘#J_endTime‘).val() //结束时间
 });
module.exports = newCalendar;
时间: 2024-11-08 14:54:48

日期控件封装的相关文章

layDate1.0正式发布,您一直在寻找的的js日期控件

你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外所有从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器.她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封闭与狭隘.layDate延续了layui一贯的简单与易用,本着资源共享的开发者精神和对网页日历交互的无穷追求,她将长年被维护和更新,

layDate1.0正式发布,您一直在寻找的的日期控件

你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外所有从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器.她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封闭与狭隘.layDate延续了layui一贯的简单与易用,本着资源共享的开发者精神和对网页日历交互的无穷追求,她将长年被维护和更新,

[原创] Web UI 自动化日期控件的处理

序 在构建自动化套件的过程中,日期操作是一件很重要也很频繁的事情.有的日期控件的div层级结构复杂,同一个类型的日期控件在多个子系统中的表现形式也大相径庭.多数工程师为了避免重复的工作,会封装抽象一个方法或公共的库,还有部分会封装成单独的日期类库. 控件 下面是去啊的日期控件 下面是相关的HTML 当然,有的日期控件元素的id为对应的日期. 代码逻辑 针对这种双日期的格式,我们如何在代码中进行处理输入? 1.      输入目标日期. 2.      判断目标日期与当前日期的差值 -      

python selenium 处理时间日期控件(十五)

测试过程中经常遇到时间控件,需要我们来选择日期,一般处理时间控件通过层级定位来操作或者通过调用js来实现. 1.首先我们看一下如何通过层级定位来操作时间控件. 通过示例图可以看到,日期控件是无法输入日期,点击后弹出日期列表供我们选择日期,自己找了一个日期控制演示一下,通过两次定位,选择了日期 #-*- coding:utf-8 -*- import time from selenium import webdriver driver = webdriver.Chrome() driver.get

ux.form.field.GridDate 支持快速选择日期的日期控件

效果如图,亲测6.2.1版本可用 1 /** 2 *支持快速选择日期的日期控件 3 */ 4 Ext.define('ux.form.field.GridDate', { 5 extend: 'Ext.form.field.Date', 6 alias: 'widget.gridDateField', 7 requires: ['ux.picker.GridDate'], 8 pickerGrid: { 9 store: { 10 //默认配置 11 data: [{ 12 value: 30,

selenium webdriver自动化对日期控件的处理

用JS去掉日期输入框的readOnly属性. 代码如下: ------------------------------------------------------------------------------------- String js="document.getElementById('dateTimeId').removeAttribute('readOnly');document.getElementById('dateTimeId').setAttribute('value'

[整理]通过AngularJS directive对bootstrap日期控件的的简单包装

最近项目上了AngularJS,而原来使用的日期控件的使用方式也需要改变,于是开始了倒腾,看来写官方的例子,可以使用AngularJS的directive做简单的处理,这样在html里直接使用申明的的形式即可使用了. <!doctype html> <html ng-app="datepickerApp"> <head> <link type="text/css" rel="stylesheet" hre

mui 时间日期控件(浏览器上无法查看,在手机端可以点击)

<head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title> <link href="css/mui.mi

12 Python+selenium对日期控件进行处理(采用执行JS脚本)

[环境信息] Python34+IE+windows2008 [说明] 1.对于日期控件,没有办法通过定位元素再直接传值的方式处理.可以采用执行JavaScript处理. PS:还要去学学js怎么写,不然要用的时候就只有到处copy了. [示例] 1.对于如下格式的日期控件需要用JS处理. 2.处理方式:通过driver.execute_script(js)执行. #问题消除时间,调用JS的当前时间 js = "function getCurrentDate() {" " v