问题:
前一阵使用ext的editgrid时发现一个怪现象,在editgrid中添加一个ComboBox,设置为可根据输入内容过滤选项,发现当选项中有中文时,每次点击ComboBox使之打开或关闭下拉框时,页面会随之闪一下,闪烁幅度很小,对功能没有任何影响,但看起来很别扭。期间多次查找原因,一直没有解决,今天偶然发现了根源,但无很好的解决办法,记录、讨论。
浏览器IE6
分析:1、开始认为可能是页面样式设置有问题,删除所有css内容,问题依旧
2、怀疑是下拉选项中有中文造成的,删除所有中文内容,的确不再出现此问题,但业务需要中文内容,解决=没解决
3、尝试解读ext的js源码及自己写的前台编码及样式内容,未发现故障原因。
4、前几天偶然发现下拉选项中全是英文及数字的情况下,偶尔也会出现上述毛病,但出现次数很少,排除中文或字符编码问题的嫌疑
5、今天偶然发现下拉选项中有中文时,偶尔也不会出现闪烁问题,经过多次试验,总结出造成此问题的几个主要条件。
问题发生条件:
1、editgrid中有ComboBox下拉选择框
2、ComboBox为可编辑的
3、ComboBox获得焦点时打开了输入法
4、页面处于全屏状态下
此时再打开或关闭ComboBox的下拉选择框,页面就会出现闪烁情况。(是否有其他必要条件暂时未知)
总结原因:
1、在编辑ComboBox内容时打开了输入法,此时,输入法的状态栏 打开并显示,点击ComboBox打开或关闭下拉选择框时,输入法状态栏总要随之关闭、打开一次,页面随之发生闪烁。HTML原有控件不会出现此问题,ext的其他控件暂时也未发现此问题,唯独ComboBox发现此现象。(ComboBox下拉框打开关闭时实际使用的是两个控件?两个控件切换+输入法状态栏的闪烁造成显示界面的异常?有时间看看源码)。
解决:实际上也不算解决办法,只是避免满足问题的触发条件。
1、在输入法设置中设置"隐藏状态栏",打开输入法时不显示状态栏,则不出现此问题。
2、保证输入法的状态栏不在页面的显示区域内,比如页面不最大化,或保证输入法状态栏在IE浏览器的状态栏以下,也不会出现此问题
2010-11-30注:今天测试发现使用智能ABC、微软输入法会出现闪烁,使用搜狗输入法时,使用默认皮肤会造成闪烁,使用推荐皮肤则没问题,与输入法的皮肤实现方式有关?