我有一个组合框,在用户选择了一个值后立即将焦点转移到另一个表单元素,使用此配置:
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'事件永远不会被激发。只有当我使用鼠标单击另一个字段时,组合才会模糊。
有谁知道发生了什么,我怎么能绕过这个?
答案 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中执行某些操作时执行,因为组合框失去焦点,而不是以编程方式丢失焦点。