2012-06-02 3 views
5

В соответствии с документами я должен иметь возможность обрабатывать ключевые события, такие как keypress, таким же образом, как я могу справиться с событием click, но я чувствую, что что-то не хватает.Как я могу обрабатывать ключевые события в метеоре?

Я сделал следующее:

> meteor create keypressTest 
> cd keypressTest 
> sed -e 's/click input/keypress body/' -i .bak keypressTest.js 
> meteor 

Но когда я нажимаю кнопки, ничего не отображается в консоли, как это происходит при обработке события нажатия.

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

ответ

5

я пропускал эти два требования к использованию ключевых событий в eventmap:

  1. цель этого события должно содержаться в шаблоне (так же, как и другие события)
  2. целевого события должны быть входным элемент, который может быть набран в

второй точки кажется согласуются с щелчком, так как click * только срабатывает при нажатии кнопки, а не в тексте приветствия, содержащемся в шаблоне.

10

Обратите внимание, что keypress is deprecated и вы можете использовать вместо этого textinput.

Тем не менее, я считаю, что keydown и keyup не являются устаревшими, поэтому использование одного из них может работать более надежно, чем при использовании keypress. Обратите внимание, что документация определяет порядок:

  1. keydown
  2. keypress
  3. keyup

Если вы хотите, чтобы воздействовать на прессу можно использовать keydown; если вы хотите действовать на лифте, используйте keyup. Я бы предпочел последнее, учитывая, что она по-прежнему позволяет отменить нажатие при переключении на другое приложение, прежде чем поднимать его ...

+0

Я вижу то же поведение (или отсутствие поведения) с помощью keydown и keyup. Я тестировал в Safari, Firefox и Chrome. –

+2

Из документа, на который вы ссылаетесь: «Событие textInput, первоначально предложенное как замена для нажатия клавиши, было удалено в пользу текущих входных и входных событий.« – user456584

+3

Как указано в [user456584], лучшим вариантом здесь является событие« input », поскольку оно будет не только запускаться сразу же после нажатия клавиши, но также после того, как фактические данные будут доступны в текстовом поле (что может быть важно) – lbergnehr

8

я могу найти мои '' события при нажатии клавиш

Template.myTemplate.events({ 
    'keypress input': function(e) { console.log('key', e); } 
}); 

или более полезной, например

Template.myTemplate.events({ 
     'keyup input': function(event) { 
     if (event.which === 13) { 
     alert('you hit enter'); 
     event.stopPropagation(); 
     return false; 
     } 
    }, 
    ... 

@tom, я не получил ничего на TextInput :(

+1

Это сработало, кроме 'event.charCode' всегда возвращает' 0'. Мне нужно было использовать 'event.keyCode'. – evolross

1

Enter вернет event.charCode = 0, вместо этого будет использовать event.keyCode, это вернет 13.

'keypress input': function(event) { 
    if (event.keyCode == 13) { 
     alert('you hit enter'); 
     event.stopPropagation(); 
     return false; 
    } 
} 
Смежные вопросы