Events ExtJS 4-组合框模糊事件被触发两次
我有一个带有模糊事件的简单组合框。模糊事件当前有一个用于测试目的的警报 问题在于,此模糊事件会触发两次,如下所示:Events ExtJS 4-组合框模糊事件被触发两次,events,extjs,combobox,extjs4,blur,Events,Extjs,Combobox,Extjs4,Blur,我有一个带有模糊事件的简单组合框。模糊事件当前有一个用于测试目的的警报 问题在于,此模糊事件会触发两次,如下所示: 如果光标在此组合框中,用户按下“tab”键,组合框将失去焦点->触发模糊事件 一旦组合框失去焦点,如果用户使用鼠标单击屏幕上的任何位置,则会再次触发模糊事件 无论如何,这个模糊事件只能触发一次吗 以下是我正在使用的完整代码: <html> <head> <title>Test Page</title>
<html>
<head>
<title>Test Page</title>
<link rel="stylesheet" type="text/css" href="ext-4.0.2a/resources/css/ext-all.css">
<script type="text/javascript" src="ext-4.0.2a/bootstrap.js"></script>
<script type='text/javascript'>
Ext.onReady(function(){
Ext.define("Post", {
extend: 'Ext.data.Model',
fields: [
{name: 'id', mapping: 'post_id'},
{name: 'title', mapping: 'topic_title'},
{name: 'topicId', mapping: 'topic_id'},
{name: 'author', mapping: 'author'},
{name: 'lastPost', mapping: 'post_time', type: 'date', dateFormat: 'timestamp'},
{name: 'excerpt', mapping: 'post_text'}
]
});
ds = Ext.create('Ext.data.Store', {
pageSize: 10,
proxy: {
type: 'jsonp',
url : 'http://www.sencha.com/forum/topics-remote.php',
reader: {
type: 'json',
root: 'topics',
totalProperty: 'totalCount'
}
},
model: 'Post'
});
panel = Ext.create('Ext.panel.Panel', {
renderTo: Ext.getBody(),
title: 'Search the Ext Forums',
width: 600,
bodyPadding: 10,
layout: 'anchor',
items: [{
xtype: 'combo',
store: ds,
displayField: 'title',
fieldLabel:'Blur Test',
listeners:{
blur:function(){
alert('1');
}
}
}, {
xtype: 'component',
style: 'margin-top:10px',
html: 'Live search requires a minimum of 4 characters.'
}]
});
});
</script>
</head>
<body>
</body>
</html>
测试页
Ext.onReady(函数(){
Ext.define(“Post”{
扩展:“Ext.data.Model”,
字段:[
{name:'id',mapping:'post_id'},
{name:'title',映射:'topic_title'},
{name:'topicId',mapping:'topic_id'},
{name:'author',映射:'author'},
{name:'lastPost',mapping:'post_time',type:'date',dateFormat:'timestamp'},
{name:'extracpt',mapping:'post_text'}
]
});
ds=Ext.create('Ext.data.Store'{
页面大小:10,
代理:{
键入:“jsonp”,
网址:'http://www.sencha.com/forum/topics-remote.php',
读者:{
键入:“json”,
根:'主题',
totalProperty:“totalCount”
}
},
模型:“Post”
});
panel=Ext.create('Ext.panel.panel'{
renderTo:Ext.getBody(),
标题:“搜索外部论坛”,
宽度:600,
车身衬垫:10,
布局:“锚定”,
项目:[{
xtype:'组合',
门店:ds,
displayField:'标题',
fieldLabel:“模糊测试”,
听众:{
模糊:函数(){
警报(“1”);
}
}
}, {
xtype:'组件',
样式:“页边距顶部:10px”,
html:“实时搜索至少需要4个字符。”
}]
});
});
提前谢谢你的帮助
PS:我使用的是ExtJS版本4.0.2a,并在Firefox、IE9和IE8中检查过这种行为。他们都是两次射击。但当在Chrome中选中时,事件只会触发一次。一个(非常糟糕)的选项是创建一个变量来跟踪模糊的计数:
var AlreadyBlurred=false//显然,您希望将其放置在非全局的位置
接下来,您可以在侦听器中执行此操作
对象:
listeners: {
blur: function (){
if(!AlreadyBlurred)
{
// Do your code here
}
AlreadyBlurred = !AlreadyBlurred;
}
}
同样,这是一个非常糟糕的想法,因为它可能会掩盖代码或Ext本身的问题。升级到4.0.7似乎没有什么帮助(JSFIDLE上的最新版本显示这种情况仍然存在)。出于好奇,为什么要在模糊事件上开火?您是否可以在更改时执行此操作,或者为期望的结果而选择 我似乎无法复制这个问题。您使用的是什么浏览器和版本的ExtJS4?谢谢您的帖子。我已使用版本和浏览器详细信息更新了我的问题。另外,我检查了你共享的fiddle链接,在那里我发现模糊事件不会被触发一次。在你的情况下它只开火一次吗?对我来说,它根本没有在fiddle链接上启动。我知道你正在使用ExtJS版本4,但它是4.0.2、4.0.2a、4.0.6等等吗?它对我来说启动得很好。我没有像您那样使用警报,因为它被认为是javascript调试的坏juju。你必须使用firebug或chrome或IE的javascript控制台才能看到它启动。你能提供更多的ExtJS代码吗?您可能正在将多个模糊事件绑定到该组合。