Extjs 3.4 中 DateField不能放在Menu中的问题解决方法
来源:互联网 发布:海康hiddns域名注册 编辑:程序博客网 时间:2024/05/16 17:50
昨天一同事遇到一个问题,把一个dateField放在menu中作为菜单项,出现了以下问题
如图,点击datefield上的trigger后menu会隐藏
于是分析原因,
原来dateField和combobox不同的是,datefield中弹出的是一个Menu,当一个Menu弹出的时候,会默认把当前其它的menu隐藏
于是把dateField改成这样
var dateField = new Ext.form.DateField({ id:'date1', hideParent :false, menu:new Ext.menu.DateMenu({ hideOnClick: false, focusOnSelect: false, allowOtherMenus:true...于菜单不会被隐藏了,但是又出现了新的问题,trigger展开后,点击dateField所在的Menu上的其它位置,trigger不会自动收回去
然后看了一下Menu的代码
Ext.menu.MenuMgr中
// private function onShow(m){ var last = active.last(); lastShow = new Date(); active.add(m); if(!attached){ map.enable(); Ext.getDoc().on("mousedown", onMouseDown); attached = true; } if(m.parentMenu){ m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3); m.parentMenu.activeChild = m; }else if(last && !last.isDestroyed && last.isVisible()){ m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3); } }
// private function onMouseDown(e){ if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){ hideAll(); } }
原来如上面代码所示,如果事件发生在任何Menu上面,则都不会触发隐藏,因为datefield的trigger弹出的是一个Menu,所以当然不会隐藏
于是模仿上面的方法,在datefield上做特殊处理
var dateField = new Ext.form.DateField({ menu:new Ext.menu.DateMenu({ hideOnClick: false, focusOnSelect: false, allowOtherMenus:true, listeners:{render:function(m){ m.mon(Ext.getDoc(),'mousedown',function(e){ if(!m.el.contains(e.getTarget())){ m.hide(); } }); }} }) });
在mousedown的时候,判断事件如果没有发生在当前menu中的任何一个元素上,则menu隐藏
问题终于解决了
上面的代码还可以这样改
var dateField = new Ext.form.DateField({ id:'date1', hideParent :false, menu:new Ext.menu.DateMenu({ hideOnClick: false, focusOnSelect: false, allowOtherMenus:true, listeners:{render:function(m){ m.mon(Ext.getBody(),'mousedown',function(e){ m.hide(); }); m.el.on('mousedown',function(e){ e.preventDefault(); e.stopPropagation(); }) }} }) });
0 0
- Extjs 3.4 中 DateField不能放在Menu中的问题解决方法
- 在Ext中EditorGrid中datefield输入问题解决过程
- Extjs中datefield监听事件
- std::string放在结构中不能删除对象的问题解决
- EXTJS 中的 DateField 和 Date 使用方法
- EXTJS中 DateField 显示一半的解决方法
- C#中 dll文件放在子目录中的方法
- 布局中组件不能放在底部
- DrawerLayout不能放在fragment中使用
- android中的UI视图更新不能放在子线程中操作
- ExtJS中Ext.menu.Menu菜单应用
- extjs new Ext.form.DateField() 在表格中的显示或者格式取值
- Extjs grid 不能复制问题解决
- extjs datefield 后台传值 格式转化方法
- ExtJs grid中 datefield 列数据 提交格式问题
- EXTJS DateField 效果显示
- aspnet的menu控件在ie8中不能正常显示
- Extjs extjs datefield日期格式
- Qt 实现桌面雪花飘落
- EXCEL打印全解
- Android NDK介绍(下)
- 一网打尽2013最常用的NoSQL数据库
- linux下,把屏幕竖起来
- Extjs 3.4 中 DateField不能放在Menu中的问题解决方法
- 使用lvm时的一个问题(Found duplicate PV )
- Java异常处理中try,catch,finally的各种组合用法
- 要知其然还要知其所以然printChar
- fragment总结
- starling事件模型
- 鸟哥私房菜之认识 bash shell - 5
- Android NDK介绍
- CCNA实验—STP