2011-05-17 9 views
11

estoy tratando de capturar el evento clave desde un punto de vista de la siguiente manera:cómo capturar el evento clave desde una vista?

myView = Backbone.View.extend({ 

    el: $('#someDiv'), 
    initialize: function(){ 
    // initialize some subviews 
    }, 
    render: function(){ 
    return this; 
    }, 
    events:{ 
    'keypress #someDiv': 'showKey' 
    }, 
    showKey: function(e){ 
    console.log(e.keyCode); 
    } 
}) 

que no funciona?

ps: No hay elementos [de entrada] en la vista o sus subvistas. Solo necesito saber si el usuario presiona cualquier tecla y luego hacer algo en la vista.

+0

he utilizado el código y el trabajo, la única cosa que hay que recordar es que el elemento que desee añadir un evento debe estar dentro " Ver el "por ejemplo, el elemento que desea adjuntar debe estar dentro de" #someDiv " –

Respuesta

4

La tecla presionada va al elemento enfocado en la página. Si no tiene nada en su vista y la vista no tiene ningún foco, entonces no tendrá ningún evento de pulsación de tecla.

(por cierto, si usted quiere hacer el evento de prensa clave para this.el, hacer "pulsación de tecla": "showkey")

En el código anterior que el cuerpo lo más probable es recibir todos los eventos de pulsación de teclas.

14

Usted puede hacer esto en la vista en función initialize():

_.bindAll(this, 'on_keypress'); 
$(document).bind('keypress', this.on_keypress); 
+0

que acaba de descubrirse hoy: si tiene problemas con las teclas que no funcionan en cromo, utilice el evento 'keydown' en lugar de la tecla. –

+13

Tenga cuidado al vincular una pulsación de tecla al documento, no se desvinculará con el resto de los eventos cuando elimine su vista. Cuando elimine su vista, también llame al: $ (documento) .unbind ('keypress', 'on_keypress'); – MrGrigg

+0

Cuando eliminé mi vista, tuve que hacer '$ (document) .unbind ('keypress', this.on_keypress)'. Casi como la respuesta de MrGrigg, pero pasando la función real, no una cadena de su nombre. –

Cuestiones relacionadas