Ext源码---TriggerField控件聚焦问题

问题描述:

今天又发现了Ext源码的小bug,TriggerField.js中源码如下:

// private
    onFocus : function(){
        Ext.form.TriggerField.superclass.onFocus.call(this);
        if(!this.mimicing){
            this.wrap.addClass(this.wrapFocusClass);
            this.mimicing = true;
            this.doc.on('mousedown', this.mimicBlur, this, {delay: 10});
            if(this.monitorTab){
                this.on('specialkey', this.checkTab, this);
            }
        }
    },

其中doc为html中body的引用,对于使用Ext的方式进行的鼠标按键绑定,只有在鼠标放置到body中的某个html元素内进行点击时,mousedown响应方法mimicBlur才会执行,对于空白处点击鼠标,mousedown的响应方法居然不响应,导致TriggerField对于失去焦点的判断总是有问题。

解决办法:

经过测试发现,document.onmousedown方法可以监听鼠标事件,只要鼠标放在窗口里进行点击就能监听到,而且this.doc又是body的引用,那么采用修改源码采用document.onmousedown方法替换,至于想获取鼠标触发时,鼠标所在的原标签可以通过event.srcElement获取。

测试结果:

IE8上这么修改OK,IE9尚未测试,另外Ext对于mousedown响应的局限性只体现在IE8,对于谷歌浏览器还是完美支持的。

相关推荐