`

Ext时间控件

    博客分类:
  • EXT
 
阅读更多
1.单独使用Ext的日期控件

Ext.onReady(function() {
    new Ext.form.DateField({
        applyTo: 'fromDate',    
        width: 110,    
        format: 'Y-m-d',    
        emptyText: '请选择日期 ...'     
    });
    new Ext.form.DateField({
        applyTo: 'toDate',    
        width: 110,    
        format: 'Y-m-d',    
        emptyText: '请选择日期 ...'     
    });
});

2.
ext自身没有日期时间合并的空间,只有自己扩展。
日期时间控件
需要ux-all.js
参考文件以上摘录自
http://luck332.iteye.com/blog/599887
修改了一行代码

Ext.ns('Ext.ux.form');
Ext.ux.form.TimePickerField=function(config) {
 Ext.ux.form.TimePickerField.superclass.constructor.call(this, config);
}
Ext.extend(Ext.ux.form.TimePickerField, Ext.form.Field, {
    defaultAutoCreate: {tag: 'div'},
 cls: 'x-form-timepickerfield',
 hoursSpinner: null,
 minutesSpinner: null,
 secondsSpinner: null,
 spinnerCfg: {
  width: 40
 },
 spinnerFixBoundries: function(value){
  if(value<this.field.minValue) {
   value=this.field.maxValue;
  }
  if(value>this.field.maxValue) {
   value=this.field.minValue;
  }
  return this.fixPrecision(value);
 },
    onRender: function(ct, position){
        Ext.ux.form.TimePickerField.superclass.onRender.call(this, ct, position);
        this.rendered=false;
  this.date=new Date();
  var values={};
  if(this.value) {
   values=this._valueSplit(this.value);
   this.date.setHours(values.h);
   this.date.setMinutes(values.m);
   this.date.setSeconds(values.s);
   delete this.value;
  }
  else {
   values={h:this.date.getHours(), m:this.date.getMinutes(), s:this.date.getSeconds()};
  }
  var spinnerWrap=Ext.DomHelper.append(this.el, {tag: 'div'});
  var cfg=Ext.apply({}, this.spinnerCfg, {
   renderTo: spinnerWrap,
   readOnly: this.readOnly,
   disabled: this.disabled,
   listeners: {
    spin: {
     fn: this.onSpinnerChange,
     scope: this
    },
    valid: {
     fn: this.onSpinnerChange,
     scope: this
    },
    afterrender: {
     fn: function(spinner) {
      spinner.wrap.applyStyles('float: left');
     },
     single: true
    }
   }
  });
  this.hoursSpinner=new Ext.ux.form.SpinnerField(
   Ext.apply({}, cfg, {
    minValue: 0,
    maxValue: 23,
    cls: 'first',
    value: values.h
   })
  );
  this.minutesSpinner=new Ext.ux.form.SpinnerField(
   Ext.apply({}, cfg, {
    minValue: 0,
    maxValue: 59,
    value: values.m
   })
  );
  this.secondsSpinner=new Ext.ux.form.SpinnerField(
   Ext.apply({}, cfg, {
    minValue: 0,
    maxValue: 59,
    value: values.s
   })
  );
  Ext.DomHelper.append(spinnerWrap, {tag: 'div', cls: 'x-form-clear-left'});
  this.rendered=true;
    },
 _valueSplit: function(v) {
  var split=v.split(':');
  return {
   h: split.length>0 ? split[0] : 0,
   m: split.length>1 ? split[1] : 0,
   s: split.length>2 ? split[2] : 0
  };
 },
 onSpinnerChange: function() {
  if(!this.rendered) {
   return;
  }
  this.fireEvent('change', this, this.getRawValue());
 },
 disable: function() {
  Ext.ux.form.TimePickerField.superclass.disable.call(this);
  this.hoursSpinner.disable();
  this.minutesSpinner.disable();
  this.secondsSpinner.disable();
 },
 enable: function() {
  Ext.ux.form.TimePickerField.superclass.enable.call(this);
  this.hoursSpinner.enable();
  this.minutesSpinner.enable();
  this.secondsSpinner.enable();
 },
 setReadOnly: function(r) {
  Ext.ux.form.TimePickerField.superclass.setReadOnly.call(this, r);
  this.hoursSpinner.setReadOnly(r);
  this.minutesSpinner.setReadOnly(r);
  this.secondsSpinner.setReadOnly(r);
 },
 clearInvalid: function() {
  Ext.ux.form.TimePickerField.superclass.clearInvalid.call(this);
  this.hoursSpinner.clearInvalid();
  this.minutesSpinner.clearInvalid();
  this.secondsSpinner.clearInvalid();
 },
 getRawValue: function() {
  if(!this.hoursSpinner){
   this.date=new Date();
   return {h:this.date.getHours(), m:this.date.getMinutes(), s:this.date.getSeconds()};
  }else{
   return {
    h: this.hoursSpinner.getValue(),
    m: this.minutesSpinner.getValue(),
    s: this.secondsSpinner.getValue()
   };
  }
 },
 setRawValue: function(v) {
  this.hoursSpinner.setValue(v.h);
  this.minutesSpinner.setValue(v.m);
  this.secondsSpinner.setValue(v.s);
 },
 isValid: function(preventMark) {
  return this.hoursSpinner.isValid(preventMark) &&
   this.minutesSpinner.isValid(preventMark) &&
   this.secondsSpinner.isValid(preventMark);
 },
 validate: function() {
  return this.hoursSpinner.validate() &&
   this.minutesSpinner.validate() &&
   this.secondsSpinner.validate();
 },
 getValue: function() {
  var v=this.getRawValue();
  return String.leftPad(v.h, 2, '0')+':'+
      String.leftPad(v.m, 2, '0')+':'+
      String.leftPad(v.s, 2, '0');
 },
 setValue: function(value) {
  if(!this.rendered) {
   this.value=value;
   return;
  }
  value=this._valueSplit(value);
  this.setRawValue(value);
  this.validate();
 }
});

Ext.form.TimePickerField=Ext.ux.form.TimePickerField;
Ext.reg('timepickerfield', Ext.form.TimePickerField);
Ext.ns('Ext.ux.form');
Ext.DateTimePicker = Ext.extend(Ext.DatePicker, {
    timeFormat:'g:i:s A',
    timeLabel:'时间',
    timeWidth:100,
    initComponent:function() {
        Ext.DateTimePicker.superclass.initComponent.call(this);
        this.id = Ext.id();
    },
    onRender: function(container,position){
        Ext.DateTimePicker.superclass.onRender.apply(this,arguments);
        var table = Ext.get(Ext.DomQuery.selectNode('table tbody',container.dom));
        var tfEl = Ext.DomHelper.insertBefore(table.last(),{tag:'tr',
            children:[{tag:'td',cls:'x-date-bottom',html:this.timeLabel,style:'width:30;'},{tag:'td',cls:'x-date-bottom ux-timefield', colspan:'2'}]},true);
        this.tf.render(table.child('td.ux-timefield'));
        var p=this.getEl().parent('div.x-layer');
        if (p){
         p.setStyle("height",p.getHeight()+31);
        }
    },
    setValue : function(value){
        var old = this.value;
        this.value = this.getDateTime(value);
        if (!this.tf){
            this.tf = new Ext.ux.form.TimePickerField();
            this.tf.ownerCt = this;
            this.tf.setValue(old.format(this.timeFormat));
        }
    },
    getDateTime: function(value){
        if (this.tf){
            var dt = new Date();
            var timeval = this.tf.getValue();
            value = Date.parseDate(value.format(this.dateFormat) + ' ' +this.tf.getValue(),this.format);
        }
        return value;
    },
    selectToday : function(){
        if(this.todayBtn && !this.todayBtn.disabled){
            this.value=this.getDateTime(new Date());
            this.fireEvent("select", this, this.value);
        }
    }
});
Ext.reg('datetimepickerfield', Ext.DateTimePicker);
if (parseInt(Ext.version.substr(0, 1), 10) > 2) {
    Ext.menu.DateTimeItem = Ext.DateTimePicker;
    Ext.override(Ext.menu.DateMenu,{
        initComponent: function(){
            this.on('beforeshow', this.onBeforeShow, this);
            if(this.strict = (Ext.isIE7 && Ext.isStrict)){
                this.on('show', this.onShow, this, {single: true, delay: 20});
            }
            Ext.apply(this, {
                plain: true,
                showSeparator: false,
                items: this.picker = new Ext.DatePicker(Ext.apply({
                    internalRender: this.strict || !Ext.isIE,
                    ctCls: 'x-menu-date-item'
                }, this.initialConfig))
            });
            Ext.menu.DateMenu.superclass.initComponent.call(this);
            this.relayEvents(this.picker, ["select"]);
            this.on('select', this.menuHide, this);
            if(this.handler){
                this.on('select', this.handler, this.scope || this);
            }
        }
    });
}else{
    Ext.menu.DateTimeItem = function(config){
        Ext.menu.DateTimeItem.superclass.constructor.call(this, new Ext.DateTimePicker(config), config);
        this.picker = this.component;
        this.addEvents('select');
   
        this.picker.on("render", function(picker){
            picker.getEl().swallowEvent("click");
            picker.container.addClass("x-menu-date-item");
        });
   
        this.picker.on("select", this.onSelect, this);
    };
   
    Ext.extend(Ext.menu.DateTimeItem, Ext.menu.DateMenu, {
        onSelect : function(picker, date){
            this.fireEvent("select", this, date, picker);
            Ext.menu.DateTimeItem.superclass.handleClick.call(this);
        }
    });
}

Ext.menu.DateTimeMenu = function(config){
    Ext.menu.DateTimeMenu.superclass.constructor.call(this, config);
    this.plain = true;
    var di = new Ext.menu.DateTimeItem(config);
    this.add(di);
    this.picker = di;
    this.relayEvents(di, ["select"]);

    this.on('beforeshow', function(){
        if(this.picker){
            this.picker.hideMonthPicker(true);
        }
    }, this);
};
Ext.extend(Ext.menu.DateTimeMenu, Ext.menu.Menu, {
    cls:'x-date-menu',
    beforeDestroy : function() {
        this.picker.destroy();
    },
    hide : function(deep){
        if (this.picker.tf.innerList){
            if ((Ext.EventObject.within(this.picker.tf.innerList)) || (Ext.get(Ext.EventObject.getTarget())==this.picker.tf.innerList))
                return false;
        }
        if(this.el && this.isVisible()){
            this.fireEvent("beforehide", this);
            if(this.activeItem){
                this.activeItem.deactivate();
                this.activeItem = null;
            }
            this.el.hide();
            this.hidden = true;
            this.fireEvent("hide", this);
        }
        if(deep === true && this.parentMenu){
            this.parentMenu.hide(true);
        }
    }
});

Ext.ux.form.DateTimeField = Ext.extend(Ext.form.DateField, {
    dateFormat: 'Y-m-d'
    ,timeFormat: 'H:i:s'
    ,defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"}
    ,initComponent:function() {
        Ext.ux.form.DateTimeField.superclass.initComponent.call(this);
        this.format = this.dateFormat + ' ' + this.timeFormat;
        this.afterMethod('afterRender',function(){
            this.getEl().applyStyles('top:0');
        });
    }
    ,getValue : function(){
        return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || '';
    }
    ,onTriggerClick : function(){
        if(this.disabled){
            return;
        }
        if(this.menu == null){
            this.menu = new Ext.menu.DateTimeMenu();
        }
        Ext.apply(this.menu.picker,  {
            minDate : this.minValue,
            maxDate : this.maxValue,
            disabledDatesRE : this.ddMatch,
            disabledDatesText : this.disabledDatesText,
            disabledDays : this.disabledDays,
            disabledDaysText : this.disabledDaysText,
            format : this.format,
            timeFormat: this.timeFormat,
            dateFormat: this.dateFormat,
            showToday : this.showToday,
            minText : String.format(this.minText, this.formatDate(this.minValue)),
            maxText : String.format(this.maxText, this.formatDate(this.maxValue))
        });
        if (this.menuEvents) {
            this.menuEvents('on');
        }
        else {
            this.menu.on(Ext.apply({}, this.menuListeners, {
                scope:this
            }));
        }
        this.menu.picker.setValue(this.getValue() || new Date());
        this.menu.show(this.el, "tl-bl?");
    }
});
Ext.reg('datetimefield', Ext.ux.form.DateTimeField);
分享到:
评论

相关推荐

    EXT 时间控件

    例如,以下是一个简单的EXT时间控件使用示例: ```html &lt;!DOCTYPE html&gt; &lt;link rel="stylesheet" type="text/css" href="ext-all.css"&gt; &lt;script src="ext-all.js"&gt; Ext.onReady(function() { var ...

    Ext时间控件.rar

    "Ext时间控件.rar"这个压缩包很可能是包含了一个实现此类功能的示例代码或者扩展组件。 DateTimeField是ExtJS中的一个控件,它允许用户选择日期和时间。在描述中提到的"支持时分秒的时间控件",意味着这个控件不仅...

    ext时间控件(精确到分/秒)IP控件(修正)

    "ext时间控件(精确到分/秒)IP控件(修正)"是一个这样的解决方案,它专注于提供精确的时间选择功能,并且优化了IP地址的输入体验。 1. **EXT框架**: EXT是一个强大的JavaScript库,主要用于构建富客户端的Web应用...

    ext 时间控件带有时分秒的控件

    在EXT JS这个强大的JavaScript框架中,时间控件是开发者经常使用的元素之一,特别是在构建数据密集型Web应用时。EXT JS的日期控件默认只提供日期选择功能,但往往在实际需求中,我们还需要用户能够选择具体的时间,...

    EXT 时间控件 3.0以上使用

    EXT时间控件是EXT库中的一个关键组件,用于在Web应用程序中实现用户界面的时间选择功能。EXT库是一个基于JavaScript的富客户端开发框架,它提供了一系列强大的UI组件,使得开发者能够构建出具有桌面应用般用户体验的...

    ext时间控件(精确到分/秒)IP控件

    此版本在判断输入值合法性上存在BUG, ipfield应改为: var a = /^[0-9]$/.test(value);...Ext.Msg.alert("系统提示", "请输入正确地址/掩码(0-255)"); return false; } 或者请到我新传的资源下载

    EXt时间控件,精确到分

    可看http://www.javaworld.com.tw/jute/post/view?bid=49&id=193815&sty=0&tpg=1&ppg=1&age=0#193815

    EXT 时间控件,精确到秒

    EXT 时间控件,精确到秒仔细可看http://www.javaworld.com.tw/jute/post/view?bid=49&id=193815&sty=0&tpg=1&ppg=1&age=0#193815

    ext 日期时间控件

    EXT时间控件的实现基于Ext.form.DateTimeField类,这个类继承自Ext.form.DateField,增加了对时间选择的支持。使用DateTimeField,你可以指定日期和时间的格式,例如"Y年M月d日 H:i:s",其中Y代表四位数的年份,M...

    ext时间控件(精确到分/秒)IP控件(修正)

    2.代码中引用控件代码如下: { xtype: 'uxipfield', id:'sbt', fieldLabel: 'sbt', width:200 },{ xtype: 'combotimefield', id:'nmd', name:'test.nmd', fieldLabel: 'nmd', width:200 },{ xtype: '...

    EXT时间控件的扩展

    fieldLabel:"生效时间" + CONSTANT.RED_FONT, allowBlank: false, name : "effectDate", readOnly : "true", cls : 'datefield-cls', overCls : 'datefield-over-...

    ext时间控件 (支持Extjs 3.0以上版本.)

    下载后请将文件解压在ext-3.x.x/examples/目录下! 支持 Extjs 3.0以上版本. 用过Extjs的人都晓得,Ext自身的DateField只支持日期选择,而TimeField却实现. ☆☆☆注意,开源啦,内附源码☆☆☆☆

    ext4 年月时间控件 年月日时间控件 年月日时分秒时间控件

    1. **EXT4时间控件**:EXTJS4是Sencha公司开发的一个富客户端JavaScript框架,它包含了大量的UI组件,其中时间控件是其一。EXT4的时间控件基于jQuery UI,提供了丰富的样式和功能,可以轻松地与后台数据进行交互。 ...

    ext 时间控件 精确到秒

    目前只是测试了ext2.x,精确到秒。源码是下载别人的,之后修改了一下明显的bug。

    ext日期时间控件2

    EXT日期时间控件2是一款基于EXT JavaScript库的高级UI组件,专为网页应用设计,用于提供用户友好的日期和时间选择功能。EXT是一个强大的前端框架,由Sencha公司开发,广泛应用于构建富互联网应用程序(RIA)。EXT的...

    ext时间控件,可以选择时分秒

    link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/extjs/resources/css/ext-all.css" /&gt; &lt;link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath...

    EXT日期加时间控件

    EXT日期加时间控件 EXT日期加时间控件

    Ext时间日期选择控件,精确到秒

    标题“Ext时间日期选择控件,精确到秒”指出了该控件允许用户选择时间到秒级别,这对于需要精确时间记录的应用场景(如日程安排、定时任务等)非常关键。EXTJS提供了多种时间日期选择控件,如`MyTimeField.js`、`...

    Ext做的时间段选择控件

    自己第一次用Ext做的时间段选择控件,是参考公司了另一同事的控件修改的希望对大家有用。

    Ext日期时间控件 Spinner控件 Ext代码 Extjs Grid

    在本文中,我们将深入探讨`ExtJS`框架中的两个关键组件——`Ext日期时间控件`和`Spinner控件`,以及它们在`Grid`中的应用。`ExtJS`是一款强大的JavaScript库,专用于构建富客户端应用程序,尤其适用于创建复杂的、...

Global site tag (gtag.js) - Google Analytics