2012-06-02 12 views
5

De acuerdo con los documentos, debería ser capaz de manejar eventos clave como keypress de la misma manera que puedo manejar el evento click, pero siento que me falta algo.¿Cómo puedo manejar eventos clave en meteoritos?

que he hecho lo siguiente:

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

Pero cuando presiono las teclas y no aparece nada en la consola como lo hace cuando se manipula el evento click.

¿Hay algún ejemplo de manejo de clave de trabajo en meteoro? Sé que puedo hacer una solución alternativa en jquery, pero preferiría atenerme a los eventos de plantillas limpias si puedo.

Respuesta

5

me estaba perdiendo estos dos requisitos para utilizar los eventos clave en el eventmap:

  1. el destino del evento debe estar contenido dentro de la plantilla (igual que otros eventos)
  2. el destino del evento debe ser un elemento de entrada que se pueden escribir en

el segundo punto parece consistente con clic, ya que un click * solo se dispara al hacer clic en el botón, no en el texto de saludo que también está dentro de la plantilla.

10

Tenga en cuenta que keypress is deprecated y es posible que desee utilizar textinput en su lugar.

Sin embargo, observo que keydown y keyup no están en desuso, por lo que usar uno de ellos podría funcionar de manera más confiable que con keypress. Tenga en cuenta que la documentación especifica el orden:

  1. keydown
  2. keypress
  3. keyup

Si desea actuar sobre la prensa se puede utilizar keydown; si quiere actuar sobre el ascensor, use keyup. Yo preferiría este último teniendo en cuenta que todavía le permite cancelar la pulsación de tecla al cambiar a otra aplicación antes de levantarlo ...

+0

Estoy viendo el mismo comportamiento (o falta de comportamiento) con la tecla y la tecla. Lo probé en Safari, Firefox y Chrome. –

+2

Del documento al que se vincula: "El evento textInput, originalmente propuesto como reemplazo de la pulsación de tecla, se eliminó a favor de la entrada anterior actual y de los eventos de entrada." – user456584

+3

Como dice @ user456584, la mejor opción aquí parece ser el evento' input' ya que no solo se disparará inmediatamente cuando se presione la tecla, sino también después de que los datos reales estén disponibles en el campo de texto (lo cual podría ser importante) – lbergnehr

8

puedo encontrar mis eventos de pulsación de teclas ''

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

o en un ejemplo más utilizable

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

@ Tom, no consiguió nada de entrada de texto :(

+1

Esto funcionó, excepto 'event.charCode' siempre devuelve' 0'. Necesitaba usar 'event.keyCode'. – evolross

1

Enter devolverá un event.charCode = 0, en su lugar use event.keyCode esto devolverá 13.

'keypress input': function(event) { 
    if (event.keyCode == 13) { 
     alert('you hit enter'); 
     event.stopPropagation(); 
     return false; 
    } 
} 
Cuestiones relacionadas