博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
extjs年月选择日历及通用js同步ajax调用返回json object
阅读量:6511 次
发布时间:2019-06-24

本文共 2727 字,大约阅读时间需要 9 分钟。

  hot3.png

前段做报表,要按年月统计结果,之前的报表用的都是这种年月选择框:c32d7a6b60d55c7bf7ce77fefcd26217a11.jpg,这在弹框里很难看,我在网上查找了很多资料,找到了别人重写的datepicker方法,开始测试没发现什么问题,后来再上线后发现只要到月底,选择偶数月份失去焦点时,输入框里的月份会自动加1,别人数这是extjs的bug,但是总不能因为是bug就不做吧,后来终于在网上查找到了插件代码,才搞定:

1:ext3版本插件

来自官方论坛:

插件代码:

Ext.ux.MonthPickerPlugin = function() { 

    var picker=null; 
    var oldDateDefaults=null; 

    this.init = function(pk) { 

        picker = pk; 
        picker.onTriggerClick = picker.onTriggerClick.createSequence(onClick); 
        picker.getValue = picker.getValue.createInterceptor(setDefaultMonthDay).createSequence(restoreDefaultMonthDay); 
        picker.beforeBlur = picker.beforeBlur.createInterceptor(setDefaultMonthDay).createSequence(restoreDefaultMonthDay); 
    }; 

    function setDefaultMonthDay() { 

        oldDateDefaults = Date.defaults.d; 
        Date.defaults.d = 1; 
        return true; 
    } 

    function restoreDefaultMonthDay(ret) { 

        Date.defaults.d = oldDateDefaults; 
        return ret; 
    } 

    function onClick(e, el, opt) { 

        var p = picker.menu.picker; 
        p.activeDate = p.activeDate.getFirstDateOfMonth(); 
        if (p.value) { 
            p.value = p.value.getFirstDateOfMonth(); 
        } 

        p.showMonthPicker(); 

         
        if (!p.disabled) { 
            p.monthPicker.stopFx(); 
            p.monthPicker.show(); 
   // if you want to click,you can the dblclick event change click
            p.mun(p.monthPicker, 'click', p.onMonthClick, p); 
            p.mun(p.monthPicker, 'click', p.onMonthDblClick, p); 
            p.onMonthClick = p.onMonthClick.createSequence(pickerClick); 
            p.onMonthDblClick = p.onMonthDblClick.createSequence(pickerDblclick); 
            p.mon(p.monthPicker, 'click', p.onMonthClick, p); 
            p.mon(p.monthPicker, 'click', p.onMonthDblClick, p); 
        } 
    } 

    function pickerClick(e, t) { 

        var el = new Ext.Element(t); 
        if (el.is('button.x-date-mp-cancel')) { 
            picker.menu.hide(); 
        } else if(el.is('button.x-date-mp-ok')) { 
            var p = picker.menu.picker; 
            p.setValue(p.activeDate); 
            p.fireEvent('select', p, p.value); 
        } 
    } 

    function pickerDblclick(e, t) { 

        var el = new Ext.Element(t); 
        if (el.parent() 
            && (el.parent().is('td.x-date-mp-month') 
            || el.parent().is('td.x-date-mp-year'))) { 

            var p = picker.menu.picker; 

            p.setValue(p.activeDate); 
            p.fireEvent('select', p, p.value); 
        } 
    } 
}; 

Ext.preg('f-monthPickerPlugin', Ext.ux.MonthPickerPlugin);  

使用:

new Ext.form.DateField({  

   renderTo: document.body,  

   plugins:'monthPickerPlugin',  

    name:'month',  

    format: 'Y-m'  

});  

效果:

45093e77d02881bd7b23f5948fd3a8c9bf0.jpg

 

/** 

 *通用JS 同步ajax调用 返回json Object 
 *  
 * {} 
 *            urlStr 
 * {} 
 *            paramsStr 为字符串键值对形式“key=value&key2=value2” 
 * {} 返回json Object 
 */ 
function ajaxSyncCall(urlStr, paramsStr) {  
    var obj='';  
    if (window.ActiveXObject) {  
        obj = new ActiveXObject('Microsoft.XMLHTTP');  
    } else if (window.XMLHttpRequest) {  
        obj = new XMLHttpRequest();  
    }  
    obj.open('POST', urlStr, false);  
    obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  
    obj.send(paramsStr);  
    var result = Ext.util.JSON.decode(obj.responseText);
    return result;  
}

 

 

 

转载于:https://my.oschina.net/czpdjx/blog/1830400

你可能感兴趣的文章
告别暗黄皮肤变水嫩皮肤的8个小习惯
查看>>
加强Eclipse代码自动提示的方法
查看>>
【HM】第4课:MySQL入门
查看>>
GNS3-地址重叠环境中部署IPsec
查看>>
exchange online 用户疑问之许可证和用户数据归档
查看>>
QImage Mat IplImage 之间的相互转换
查看>>
lsof命令详解
查看>>
使用eclipse与android studio 在开发自定义控件时的区别
查看>>
我的友情链接
查看>>
mysql学习笔记
查看>>
django 问题解决
查看>>
年年有鱼游戏Android源码项目
查看>>
java使用Iterator、for循环同步数据
查看>>
创建镜像iso文件
查看>>
Linux下创建软RAID5和RAID10实战
查看>>
mariadb的日志
查看>>
C++类的存储
查看>>
ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
查看>>
解决使用Handler时Can't create handler inside thread that has not called Looper.prepare()
查看>>
跟我一起学docker(四)--容器的基本操作
查看>>