Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events ExtJS 4-组合框模糊事件被触发两次_Events_Extjs_Combobox_Extjs4_Blur - Fatal编程技术网

Events ExtJS 4-组合框模糊事件被触发两次

Events ExtJS 4-组合框模糊事件被触发两次,events,extjs,combobox,extjs4,blur,Events,Extjs,Combobox,Extjs4,Blur,我有一个带有模糊事件的简单组合框。模糊事件当前有一个用于测试目的的警报 问题在于,此模糊事件会触发两次,如下所示: 如果光标在此组合框中,用户按下“tab”键,组合框将失去焦点->触发模糊事件 一旦组合框失去焦点,如果用户使用鼠标单击屏幕上的任何位置,则会再次触发模糊事件 无论如何,这个模糊事件只能触发一次吗 以下是我正在使用的完整代码: <html> <head> <title>Test Page</title>

我有一个带有模糊事件的简单组合框。模糊事件当前有一个用于测试目的的警报

问题在于,此模糊事件会触发两次,如下所示:

  • 如果光标在此组合框中,用户按下“tab”键,组合框将失去焦点->触发模糊事件

  • 一旦组合框失去焦点,如果用户使用鼠标单击屏幕上的任何位置,则会再次触发模糊事件

  • 无论如何,这个模糊事件只能触发一次吗

    以下是我正在使用的完整代码:

    <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代码吗?您可能正在将多个模糊事件绑定到该组合。