extjs triggerfield不会引发模糊

时间:2014-02-17 06:04:59

标签: javascript extjs extjs4 blur

更新:我尝试了@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/

重现:

  • 点击第一个名称字段
  • 点击标签,它会跳转到触发器,然后跳转到 mid init 字段。
  • 此时控制台显示触发器模糊
  • 现在点击面板中的任意位置,您会看到触发器模糊

这种行为在我们的应用程序中引起了一些非常意想不到的问题,这是一个微不足道的事情,我们基于这样的事实做出了假设,即这样的事情会起作用。

我很想爱:

  • 任何解决此问题的建议,也许是纯粹的javascript
  • 是否有希望让extjs guys解决此问题?

1 个答案:

答案 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