代码之家  ›  专栏  ›  技术社区  ›  anka

基于extjs中的日期差异隐藏textfield

  •  -1
  • anka  · 技术社区  · 7 年前

            {
                title: 'Start Date',
                margin: '0 20 0 0',
                items: {
                    xtype: 'datepicker',
                    value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                    itemId: 'startDate',
                    showToday: false,
                }
            },
            {
                title: 'End Date',
                margin: '0 20 0 0',
                items: {
                    xtype: 'datepicker',
                    itemId: 'endDate',
                    value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                    showToday: false
                }
            }
        ]
    },
    {
        xtype: 'container',
        layout: 'hbox',
        items: [
            {
                margin: '0 20 0 0',
                items: {
                    xtype: 'textfield',
                    name: 'text'
                }
            }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Ankit Chaudhary    7 年前

    你可以听听 select

        listeners: {
         select: function(datepicker, startDate) {
         var endDate = datepicker.up('form').down('#endDate').getValue();
         var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
         var diffDays = Math.round(Math.abs((endDate.getTime() - startDate.getTime()) / (oneDay)));
         if (diffDays > 30) {
              datepicker.up('form').down('[name=text]').hide();
             } else {
              datepicker.up('form').down('[name=text]').show();
             }
        }
       }
    

    使用 handler

    handler: function(datepicker, startDate) {
                 var endDate = datepicker.up('form').down('#endDate').getValue();
                 var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
                 var diffDays = Math.round(Math.abs((endDate.getTime() - startDate.getTime()) / (oneDay)));
                 if (diffDays > 30) {
                      datepicker.up('form').down('[name=text]').hide();
                     } else {
                      datepicker.up('form').down('[name=text]').show();
                     }
                }
    

    示例工作代码:

    Ext.application({
          name: 'Fiddle',
    
          launch: function() {
            Ext.create('Ext.form.Panel', {
                title: 'Simple Form',
                // The fields
                items: [{
                    title: 'Start Date',
                    margin: '0 20 0 0',
                    items: {
                      xtype: 'datepicker',
                      value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                      itemId: 'startDate',
                      showToday: false,
                      handler: function(datepicker, startDate) {
    
                           var endDate = datepicker.up('form').down('#endDate').getValue();
                           var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
                           var diffDays = Math.round(Math.abs((endDate.getTime() - startDate.getTime()) / (oneDay)));
                           if (diffDays > 30) {
                             datepicker.up('form').down('[name=text]').hide();
                           } else {
                             datepicker.up('form').down('[name=text]').show();
                           }
                         }
                       
                    }
                    }, {
    
                    title: 'End Date',
                    margin: '0 20 0 0',
                    items: {
                      xtype: 'datepicker',
                      itemId: 'endDate',
                      value: Ext.Date.add(new Date(), Ext.Date.DAY, -1),
                      showToday: false,
                      handler: function(datepicker, endDate) {
    
                           var startDate = datepicker.up('form').down('#startDate').getValue();
                           var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
                           var diffDays = Math.round(Math.abs((endDate.getTime() - startDate.getTime()) / (oneDay)));
                           if (diffDays > 30) {
                             datepicker.up('form').down('[name=text]').hide();
                           } else {
                             datepicker.up('form').down('[name=text]').show();
                           }
                         }
                       
                    },
                    },
                    {
                      xtype: 'container',
                      layout: 'hbox',
                      items: [{
                        margin: '0 20 0 0',
                        items: {
                          xtype: 'textfield',
                          name: 'text'
    
                        }
                      }]
                    }],
                  renderTo: Ext.getBody()
                });
            }
          });
    <link rel="stylesheet" href="https://cdn.sencha.com/ext/gpl/4.1.1/resources/css/ext-all.css">
    <script type="text/javascript"  src="https://cdn.sencha.com/ext/gpl/4.1.1/ext-all-debug.js"></script>
        2
  •  1
  •   Narendra Jadhav    7 年前

    在ExtJs中有 Date singletone class

    Sencha Fiddle

    希望它能帮助你解决你的问题。

    Ext.create('Ext.form.Panel', {
        renderTo: Ext.getBody(),
        width: 300,
        bodyPadding: 10,
        title: 'Dates',
        items: [{
            xtype: 'datefield',
            anchor: '100%',
            fieldLabel: 'Start Date',
            name: 'from_date',
            listeners: {
                select: function () {
                    this.up().onDateSelect();
                }
            }
        }, {
            xtype: 'datefield',
            anchor: '100%',
            fieldLabel: 'End Date',
            name: 'to_date',
            listeners: {
                select: function () {
                    this.up().onDateSelect();
                }
            }
        }, {
            xtype: 'textfield',
            fieldLabel: 'Hidable field',
            name: 'fName'
        }],
        onDateSelect: function () {
            var startDate = this.down('[name=from_date]').getValue(),
                endDate = this.down('[name=to_date]').getValue(),
                textField = this.down('[name=fName]');
            textField.setHidden(Ext.Date.diff(startDate, endDate, 'd') > 30);
        }
    });