【问题标题】:Make ExtJS input field lose focus使 ExtJS 输入字段失去焦点
【发布时间】:2013-03-07 11:45:47
【问题描述】:

我有一个numberfield 输入,我想在用户按下回车键时失去焦点。

这是当前配置:

{
  xtype: 'numberfield',
  minValue: 0,
  maxValue: 99999,
  hideTrigger: true,
  keyNavEnabled: false,
  mouseWheelEnabled: false,
  enableKeyEvents: true,

  listeners: {
    specialkey: function(f, e) {
      if (e.getKey() == e.ENTER)
        f.blur();
    }
  }
}

specialkey 处理程序正常工作,按预期调用blur(),但唯一的结果是插入符号从输入中消失(表明 DOM 文本输入元素已被模糊)。该字段仍然具有所有 x-form-focus 等 css 类,并且检查对象表明私有 hasFocus 属性仍然为 true。

有什么建议吗?

我曾尝试在blur() 调用之后显式调用f.onBlur(),但没有任何区别。

(顺便说一句,该字段不属于表单,因此没有要提交的表单。)

【问题讨论】:

  • 聚焦另一个组件怎么样?甚至它的父容器...
  • @VoidMain - 欢呼,但与调用 blur() 的结果相同
  • 如果你打电话给f.up().focus(); 它不会让f 失去它的重点课程吗?
  • 快速提问:您是单独打电话给f.up().focus(),还是之前打电话给f.blur()?本地测试表明,如果我调用f.blur() 调用f.up().focus() 它,不知何故,被忽略了......
  • @VoidMain focus() 单独,但尝试两者都会得到相同的结果

标签: extjs extjs4


【解决方案1】:

修复。该问题是由 Ext.form.field.Trigger 类中的一种奇怪行为引起的,当调用常规 'blur()' 函数时,它们不会触发 'triggerBlur()'。很有趣:

listeners: {
    specialkey: function(f, e) {
        if (e.getKey() == e.ENTER)
        {
            f.triggerBlur();
            f.blur();
        }
    }
}

【讨论】:

  • 谢谢!它确实有效,但鉴于 triggerBlur 是私有的,它看起来像一个 extjs 错误。我将把它传递给 ExtJS 支持。
  • 顺便说一句,只需将 triggerBlur() 放入您的代码中即可解决您的问题。
  • 是的。这绝对是一个错误,但这是修复。
  • 确保你询问所有关于你在 SO 上发现的错误。根据我的经验,这里有一些非常聪明的人可以为您修复它们,有时比他们的支持更快或更好。
  • 确实,SO 是第一个要问的地方。事实上,我忘记了我们订阅了 extjs 的支持 :)
【解决方案2】:

这对我有用:

specialkey: function(field,events) {
    if (events.getKey() == events.ENTER) {
        var nextfld = field.nextSibling(); 
        nextfld.focus(true,100);
    }
}

specialkey - 像 textfield,textare,datefield 等组件的监听器,

events.getKey - 获取用户键盘输入

events.ENTER - 我使用它是因为当键盘输入“ENTER”时会触发它

field.nextSibling - 字段引用当前组件,组件的 nextSibling 属性告诉谁将成为下一个组件

最后是 nextfld.focus 聚焦下一个组件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多