ComboBox 和 DateField 在IE下消失的解决方法


Posted in Javascript onAugust 30, 2013

前言

作为Ext JS 的基本的Form 的组件, 这两个没有什么难的地方。
但是开发过程中却遇到了在 IE 浏览器中, 放大, 缩小窗口大小, 会导致 这两个组件消失不见。 点击某些地方又能显示出来。 不报任何错误。 在其他浏览器正常。

问题发生的状况

因为是在原项目的基础上导入Ext js , 所以页面中的form 并不是通过标准的 先创建form 组件, 再add form field 的方式进行的。
这里使用的 是纯html的form 和 input, 再使用Ext js 把 input render 成 Combobox 和 DateField.

说一下 combobox 产生的机制:

1. 通过Id 找到原input
2. 再找到这个input 的parent (原input 就可以删除了)
3. 创建新的Ext js Combobox 组件, render 到 原 input 的parent 中。(id 设置成原input id)

var comboInput = Ext.get(inputId); 
var comboInputParent = comboInput.parent(); 
comboInput.destroy(); 
var store = Ext.create('Ext.data.Store', { 
fields: ['abbr', 'name'], 
data : [ 
{"abbr":"AL", "name":"Alabama"}, 
{"abbr":"AK", "name":"Alaska"}, 
{"abbr":"AZ", "name":"Arizona"} 
//... 
] 
}); Ext.create('Ext.form.ComboBox', { 
id: inputId, 
store: store, 
displayField: 'name', 
valueField: 'abbr', 
typeAhead : true, 
renderTo : comboInputParent 
});

Date Field 产生的机制类似。

方案探求

使用IE Developer 查看窗口变化后, 组件的变化。
发现,组件还在。

Ext js 组成一个Comobox 主要是:

在一个div 中套一个table, table 中套一个tr, tr 中有两个td , 第二个td 就是主要显示组件的。 看一些大致内容:

<td role="presentation" class="x-form-item-body" id="XXXX-bodyEl" colspan="3" style="width: 100%;">

一开始以为是 把原input destory掉, 导致无法render, 改换成 hide(), 或是setDisabled,或setVisable 都不行。

以上td 还是存在在页面上, 不过位置发生了变化, 已经不再table 下面了。

看上去是Css 导致的。在 IE Developer 中 删除 x-form-item-body , IE 中正常了, 欣喜。

看一下Ext js 中x-form-item-body的定义

.x-form-item-body { 
position: relative; 
}

很简单, 就一行. 看来就是这个相对位置导致的。

不该Ext js 本身的CSS, 在自己的页面加入:

<style> 
.x-form-item-body { 
position: static !important; 
} 
</style>

static 是position 的默认值, 相当与没有设置值。
一切正常了 ^^
但是有一个问题, Chrome 和firefox 并没有这个问题。 保险起见,对原功能的改动尽量要影响小一些。
加上条件注释:
<!--[if IE]> 
<style> 
.x-form-item-body { 
position: static !important; 
} 
</style> 
<![endif]-->

只有在IE下, 以上代码才生效。
Javascript 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
javascript FormatNumber函数实现方法
Dec 30 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
Jul 12 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
浅析JavaScript中的类型和对象
Nov 29 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
javascript函数声明和函数表达式区别分析
Dec 02 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
May 16 jQuery
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
图片Slider 带左右按钮的js示例
Aug 30 #Javascript
javaScript 动态访问JSon元素示例代码
Aug 30 #Javascript
Jquery读取URL参数小例子
Aug 30 #Javascript
返回页面顶部top按钮通过锚点实现(自写)
Aug 30 #Javascript
细说javascript函数从函数的构成开始
Aug 29 #Javascript
密码框显示提示文字jquery示例
Aug 29 #Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
Aug 29 #Javascript
You might like
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
javascript document.execCommand() 常用解析
2009/12/14 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
Python简明入门教程
2015/08/04 Python
Python Grid使用和布局详解
2018/06/30 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
化工机械应届生求职信
2013/11/04 职场文书
口腔医学技术应届生求职信
2013/11/09 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
银行门卫岗位职责
2013/12/29 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
天那边观后感
2015/06/09 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
python_tkinter事件类型详情
2022/03/20 Python
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python