Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   KeyMap и body формы (https://javascript.ru/forum/extjs/5357-keymap-i-body-formy.html)

kez 07.10.2009 17:00

KeyMap и body формы
 
Есть KeyMap.
Код:

new Ext.KeyMap(Ext.getCmp('my-form').body, [{
    key: Ext.EventObject.ENTER,
    fn: function() {
        Ext.getCmp('my-form').submit();
    },
    scope: this
}]);

не хочется ссылаться на компонент таким образом
Код:

Ext.getCmp('my-form').submit();
т.к. на странице присутствует два компонента с таким id.
как можно в моем случае получить в какой из форм был нажат Enter? прошу учесть что кеймап забиндин на Ext.getCmp('my-form').body и ссылка по this не проходит. пытался выйти по findParent('form'), тоже не получилось.
Заранее спасибо.

e1f 07.10.2009 18:39

Попробуйте event.target || event.srcElement события. А вообще-то это кака -- два элемента с одинаковыми id. Самому-то не стыдно? ;)

Kolyaj 07.10.2009 22:38

Это не кака, так просто работать не будет.

kez 07.10.2009 23:30

а чего стыдно то? )
у меня есть класс, который расширяет панель и на ней куча полей ввода.
в моем случае это логинФорма. эта панель встречается в двух вариациях - как просто панель на главной странице, так и всплывающее окно. соответственно одновременно, если пользователь вызовет всплывающее окно, то будет существовать два экземпляра этого класса(формы).
вешать на каждое поле обработчик - не практично, следовательно остается KeyMap. не понял откуда можно получить event.
я с extJS всего пару дней, так что не судите, а советом помогите)

Kolyaj 08.10.2009 09:07

kez,
не может быть двух элементов с одинаковыми id. Какой-то из них учитываться не будет.

kez 08.10.2009 09:25

да. вы оказались правы - второй созданный экземпляр не реагирует на KeyMap.
а как мне правильнее поступить в моем случае?...на каждое поле обработчики не очень хочется вешать. есть более красивое решение?

e1f 08.10.2009 14:12

Есть. Класс.

kez 08.10.2009 14:52

так у меня форма и реализована в виде класса.
объясните подробнее, пожалуйста.

e1f 08.10.2009 15:05

Выбирайте элементы для бинда, используя class, а не id.
А зачем биндить на body-то? Получается, что где бы не был нажат Enter, мы все равно должны что-то сабмитить?

kez 08.10.2009 15:13

Да. смысл в этом.
в форме 2а поля - логин и пароль ну и кнопка.

e1f 08.10.2009 15:24

Цитата:

Сообщение от e1f (Сообщение 32067)
Попробуйте event.target || event.srcElement события.

По нему добирайтесь до нужной формы в fn

kez 08.10.2009 16:39

а если класс не используется? использовать класс пустышку?

e1f 08.10.2009 16:59

Хм. Ну ID-"пустышку" Вы же используете (зачем вообще форме ID?). Не вижу проблемы.

kez 08.10.2009 20:26

попробую объяснить.
есть форма, которая представлена собственным классом.
при входе на главную страницу создается ее экземпляр. так же есть ссылка - "создать аккаунт", при клике на которую мы попадаем в модальное окно регистрации, но в этом окне так же есть ссылка "открыть существующий аккаунт"(не спрашивайте зачем такая сложность-заказчик хочет), при клике на которую должна появиться та же форма но в модальном окне.
в итоге мы имеем два экземпляра одного класса. повесить идентификатор на форму хотел что бы можно было использовать KeyMap, потому как другого метода найти данные формы не знаю.


Часовой пояс GMT +3, время: 06:36.