ljngya 2014-05-07
问题描述:
今天又发现了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,对于谷歌浏览器还是完美支持的。