惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google DeepMind News
Google DeepMind News
博客园_首页
云风的 BLOG
云风的 BLOG
月光博客
月光博客
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
D
Docker
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 叶小钗
Martin Fowler
Martin Fowler
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 我不是冷狐冲,我就是一酒壶

又长草啦 MVC框架下的图表使用(二) MVC框架下的图表使用(一) 关于消息队列的研究 GridView样式及排序问题 新年新开始 WebBrowser控件显示XML流 VS2005(C#)里读取及改变App.config里appSettings节的值 WebService开发心得 - 我不是冷狐冲,我就是一酒壶 - 博客园 VS 2005 C#操作 XML ASP调用C# DLL - 我不是冷狐冲,我就是一酒壶 - 博客园 Ajax学习笔记 VML图表控件 含吃蛇,加了存档功能了 在cs页取得当前Web页输出的HTML - 我不是冷狐冲,我就是一酒壶 - 博客园 VML学习笔记(本人会不断更新此文章) 长白山游记 贪吃蛇 C# C/S下DataGrid根据数据库里的值(int型)显示ImageList里的图片
普通HTML的input调用Ext js DatePicker的实现方法
我不是冷狐冲,我就是一酒壶 · 2010-10-10 · via 博客园 - 我不是冷狐冲,我就是一酒壶

    最近的项目里,统一使用了Ext js的控件库,自己也是刚刚接触Ext js,大部分的时间都要看API文档了,呵呵,这几天在要求使用普通的HTML的input来调用Ext js的DatePicker控件,在网上查了一下,没有什么太好的解决方案,由于自己动手写了一个,主要的思路就是在input的onclick事件时,调用Ext js DatePicker的show事件,并自己处理一些显示及它事件,下边贴出代码,写得比较急,很多地方还可以优化,呵呵

代码


ExtendDatePicker 
= function (target) {
    
var datePickerContainer = null;                 //DatePicker容器
    var datePickerContainerID = null;               //DatePickerID
    var isCreate = false;                           //是否已建立DatePicker
    var datePicker = null;                          //datePicker对象
    var target = target;                            //赋值对象
    var divElement;                                 //层对象

    Ext.get(target).on(
"click", showDatePicker);
    datePickerContainerID 
= target + "_datePickerContainer_extjs";function showDatePicker() {
        
if (datePicker === null) {
            
if (datePickerContainer === null) {
                getContainer();

            }

            datePicker 

= new Ext.DatePicker({
                showToday: 
false
            });

            divElement 

= Ext.get(datePickerContainerID);
            divElement.applyStyles(
"position:absolute");
            divElement.applyStyles(
"z-index:99999");
            datePicker.render(datePickerContainerID);
            datePicker.on(
'select', selectEvent);
        }

        setPosition();

if (Ext.get(target).getAttribute("value"!== "") {
            
try {
                datePicker.setValue(Date.parseDate(Ext.get(target).getValue(), 
"m/d/Y"));
            }
            
catch (err) {
                alert(
"invalid date format");
            }
        }

        Ext.getDoc().on(

"mousedown", closeEvent);
        Ext.EventManager.on(window, 
'resize', setPosition);
        datePicker.show();
    }
function closeEvent(doc, sender) {
        
if (sender === undefined
            
|| sender === null
            
|| !(sender.getAttribute("id"=== target
            
|| sender === datePickerContainer
            
|| findChild(datePickerContainer, sender))) {
            datePicker.hide();
            Ext.getDoc().un(
"mousedown", closeEvent);
            Ext.EventManager.un(window, 
'resize', setPosition);
        }
    }
function selectEvent(sender, e) {
        document.getElementById(target).value 
= e.format("m/d/Y");
        datePicker.hide();
    }
function getContainer() {
        datePickerContainer 
= document.createElement("div");
        document.body.appendChild(datePickerContainer);

        datePickerContainer.setAttribute(

"id", datePickerContainerID);
        datePickerContainer.setAttribute(
"name", datePickerContainerID);
    }
function setPosition() {
        
var targetElement = Ext.get(target);
        
if (Ext.getBody().getHeight() - targetElement.getHeight() - targetElement.getY() < 165) {
            divElement.setY(targetElement.getY() 
- 165);
        }
        
else {
            divElement.setY(targetElement.getY() 
+ targetElement.getHeight());
        }

        divElement.setX(targetElement.getX());
        divElement.applyStyles(

"width:9px");        //让层有宽度
    }
}
function findChild(docElement, sourceElement) {
    
if (docElement === sourceElement) {
        
return true;
    }
    
else {
        
if (docElement.childNodes.length > 0) {
            
for (var i = 0; i < docElement.childNodes.length; i++) {
                
if (findChild(docElement.childNodes[i], sourceElement) == true) {
                    
return true;
                }
            }
        }
    }
return false;
}