手动移动焦点时,组合不会模糊

时间:2011-12-28 12:55:12

标签: javascript extjs extjs3

我有一个组合框,在用户选择了一个值后立即将焦点转移到另一个表单元素,使用此配置:

new Ext.form.ComboBox({
    // ...
    listeners: {
        select: function( a, record ) {
            if ( typeof( record ) == 'undefined' ) {
                return;
            }

            if ( !Ext.getCmp('input-name').getValue() ) {
                Ext.getCmp('input-name').focus();
            }
        },
        blur: function() {
            console.log('blurred');
        },
        render: function( field ) {
            if ( !config.activity ) {
                field.onTriggerClick();
            }
        }
    },
    // ...
});

然而,奇怪的事情发生了。 'input-name'表单字段获得焦点,我可以开始输入它,但组合字段永远不会模糊。它仍然具有'x-form-focus'风格,'blur'事件永远不会被激发。只有当我使用鼠标单击另一个字段时,组合才会模糊。

有谁知道发生了什么,我怎么能绕过这个?

2 个答案:

答案 0 :(得分:2)

这就是我解决它的方法:

listeners: {
    select: function( a, record ) {
        if ( typeof( record ) == 'undefined' ) {
            return;
        }

        /**
         * There's some weird stuff going on in the combo control, that causes it not to blur when shifting focus,
         * so we have to do it manually. This action has to be deferred, because the control is going to refocus 
         * itself at the end of the function firing this event (onViewClick()).
         */
        this.moveFocus.defer( 100, this );
    },
    render: function( field ) {
        field.moveFocus = function() {
            if ( !Ext.getCmp('input-name').getValue() ) {
                Ext.getCmp('input-name').focus();
                this.triggerBlur();
            }
        };

        if ( !config.activity ) {
            field.onTriggerClick();
        }
    }
},

答案 1 :(得分:0)

当任何一段代码作为事件的一部分被执行并导致其他事件被触发时,新事件不会被触发。 onBlur应该仅在用户在UI中执行某些操作时执行,因为组合框失去焦点,而不是以编程方式丢失焦点。