更新:我尝试了@newmount的建议,但是,如果我调用fireEvent('blur')
,那么任何键盘操作都不会触发触发器的焦点。 (只需点击鼠标即可恢复)
说实话,triggerfield在某种情况下不会触发blur。
如果我有对另一个字段的引用并且field.focus()
当前字段的模糊不会触发,则在焦点事件中。更糟糕的是,如果我点击其他任何地方,它会在以后点火。
以下是重现的代码和步骤:
Ext.onReady(function() {
Ext.define('Ext.ux.CustomTrigger', {
extend: 'Ext.form.field.Trigger',
alias: 'widget.customtrigger',
labelStyle: 'white-space: nowrap',
initComponent : function() {
this.on("focus", function() {
console.log("Trigger focused");
//the problem point.
//I do some processing here and then
//in some case I do the following:
Ext.getCmp('some_field').focus();
//when this is called the BLUR of this trigger field isn't fired.
});
this.on("blur", function() {
console.log("Trigger blurred");
});
this.callParent();
}
});
//end of onReady
});
这是一个活泼的小提琴:http://jsfiddle.net/sq37s/
重现:
这种行为在我们的应用程序中引起了一些非常意想不到的问题,这是一个微不足道的事情,我们基于这样的事实做出了假设,即这样的事情会起作用。
我很想爱:
答案 0 :(得分:3)
当以编程方式更改焦点时,事件可能不会被触发(认为事件仅在用户操作时触发)。一种解决方法是在更改焦点时以编程方式触发该事件
this.on("focus", function(e) {
console.log("Trigger focused");
if (someConditionToChangeFocus){
e.fireEvent('blur'); //Fires the blur event
Ext.getCmp('some_field').focus();
}
});
[编辑]
另一种方法是使用FocusManager的beforecomponentfocus事件,在这里摆弄:https://fiddle.sencha.com/#fiddle/3mq