2013-03-07 3 views
4

У меня есть вход numberfield, который я хочу потерять, когда пользователь нажимает клавишу ввода.Сделать поле ввода ExtJS потерять фокус

Вот текущий конфиг:

{ 
    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 и т. Д., И изучение объекта показывает, что свойство private hasFocus по-прежнему остается в силе.

Любые предложения?

Я попытался позвонить f.onBlur() прямо после звонка blur(), но это не имело значения.

(кстати поле не принадлежит к виду, так что нет никакой формы представить.)

+0

насчет фокусировки другого компонента? Даже его родительский контейнер ... – VoidMain

+0

@VoidMain - приветствует, но тот же результат, что и call blur() –

+0

Если вы вызываете 'f.up(). Focus();' он не заставляет 'f' потерять свой сфокусированный класс? – VoidMain

ответ

3

затруднительного положения. Проблема вызвана странным поведением в классе Ext.form.field.Trigger, где они не вызывают 'triggerBlur()', когда вызывается обычная функция 'blur()'. Очень интересно:

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

спасибо! Это, безусловно, работает, но с учетом того, что triggerBlur является закрытым, он выглядит как ошибка extjs. Я передам это в поддержку ExtJS. –

+0

, кстати, это исправит вашу проблему, просто поместив в ваш код triggerBlur(). – Reimius

+0

Да, это определенно ошибка, но это это исправление. – Reimius

0

Это работает для меня:

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

specialkey - это слушатель компонента, как текстовое поле, textare, DateField и т.д.,

events.getKey - получает ввод пользователя с клавиатуры

events.ENTER - я использовал это для того, что будет срабатывать, когда «ENTER» на клавиатуре

field.nextSibling - поле относится к текущему компоненту, и NextSibling свойства компонента, чтобы сказать, кто будет следующим компонентом

наконец является nextfld.focus сосредоточиться на следующий компоненте

+0

Не могли бы вы [изменить], чтобы объяснить, как работает этот код? – durron597

+0

done edit durron597 надеюсь, что он станет более ясным сейчас –

Смежные вопросы