2012-05-15 34 views
5

He escrito una función JS que solo permite el ingreso de números. Una copia de esta función es el siguiente:Se mantiene presionada la tecla shift en JavaScript

function NumbersOnly(e) { 
    var evt = e || window.event; 
    if (evt) { 
     var keyCode = evt.charCode || evt.keyCode; 
     //Allow tab, backspace and numbers to be pressed, otherwise return false for everything. 
     //(keyCode>=96 && keyCode<=105) are the numpad numbers   
     if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) { 


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 
} 

Esta función funciona bien con todos los números, pero mi problema ocurre cuando la tecla de mayúsculas se mantiene pulsado y una de las teclas numéricas se presiona. El valor devuelto es uno de los caracteres sobre los números. Entonces, por ejemplo, si mantengo presionada la tecla shift y presiono 7, se devuelve '&' pero el código de tecla sigue siendo 55. Hubiera esperado que eso fuera diferente.

Así que mi pregunta es ¿cómo puedo verificar si la tecla de mayúsculas se mantiene presionada. He intentado lo siguiente cheque, pero esto no funcionó:

if (keyCode === 16) { 
     evt.returnValue = false; 
    } 
    else { 

     if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) { 


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 

estoy usando ASP.NET 4.0.

Cualquier ayuda sería recibida con gratitud.

Gracias de antemano.

+0

Si le das la EVT en console.log, verá atributo shiftKey, si se pulsa la tecla de desplazamiento, que va a llegar a ser verdad –

Respuesta

12

Puede comprobar si se pulsa la tecla de desplazamiento usando:

if(evt.shiftKey) { 
... //returns true if shift key is pressed 
+0

brillante. Esto funciona. Gracias por su tiempo – Sun

+0

Para mí 'evt.shiftKey' no funciona, cámbielo a' event.shiftKey'. Funcionará. – Shafizadeh

+0

@Sajad, te estás perdiendo el punto. 'evt' es solo una variable, 'evt' se usa en mi respuesta en el contexto de la pregunta publicada anteriormente. vea la variable 'evt' en la pregunta, línea :: var evt = e || window.event; Espero que lo entiendas ahora –

0

Uso event.key en lugar de charCode. ¡No más números mágicos!

function onEvent(event) { 
    const key = event.key; // "a", "1", "Shift", etc. 
    if (isFinite(key)) { // Is number 
     // Do work 
    } 
}; 

Mozilla Docs

Supported Browsers

Cuestiones relacionadas