2017-07-03 3 views
1

J'ai des problèmes pour éviter les caractères spéciaux (Alt + numéro de Bloq num -> ☺☻ ♥ ♦ ♣ ◘ • ◘ ○) dans une entrée.Empêche d'appuyer sur la touche lorsque la touche Alt et le numéro du numéro Bloq sont pressés

Mon entrée est déclarée comme ceci:

<html:text styleId="inputMaxVol" styleClass="numeric"/> 

Ceci est mon onReady

$(".numeric").keydown(function(event) { 
    return maskNumber(); 
}); 

Et voici où je suis en train de faire le travail (sans succès)

function maskNumber() { 
    if (event) { 
    var charCode = (event.which)? event.which : event.keyCode; 
    console.log(charCode); 
    // If not a number 
    if ((charCode < 47 || charCode > 58) && (charCode < 95 || charCode > 105)) { 
     console.log("not a number"); 
     return false; 
    } else if (event.altKey) { 
     //No special characters admitted 
     console.log("Alt pressed"); 
     return false; 
    } 
    } else { 
    return false; 
    } 
} 

Si j'appuie sur Alt + 1 (touche "1" du pavé numérique), le smiley blanc apparaît et dans mon journal apparaît quelque chose J'ai aussi essayé avec l'événement event.preventDefault() sans succès. Une idée d'où est mon problème? Merci, j'apprécie vraiment toute aide que vous pouvez fournir.

MISE À JOUR: Comme expliqué dans les commentaires de la solution vient changer l'événement KeyDown pour keypress et changer les numéros de comparation charCode (Il est maintenant que si (charCode < 48 || charCode > 57) en raison du nombre retournés ont changé trop

Donc. solution est la suivante

$(".numeric").keypress(function(event) { 
    return maskNumber(); 
}); 

function maskNumber() { 
    if (event) { 
     var charCode = (event.which)? event.which : event.keyCode;   
     // If not a number 
     if (charCode < 48 || charCode > 57) {      
      return false; 
     }    
    } else { 
    return false; 
    } 
} 

simple!

+0

essayer cette bibliothèque: https: // github.com/tzuryby/jquery.hotkeys – brijrajsinh

Répondre

0

renvoie false ne désactive pas l'événement. Vous devez fais un event.preventDefault(), qui arrête l'événement, au lieu de retourner false.

event.preventDefault(); 

Le return false travaille pour un événement onbeforesubmit, d'un formulaire.

+0

Comme vous pouvez le voir dans mon premier post, j'ai déjà essayé mais le caractère est affiché aussi :( – Ivan

+0

Avez-vous ajouté le 'event.preventDefault()' à l'int e 'onkeydown'? $ ("numérique".) Keydown (function (event) { if (maskNumber()) { événement .preventDefault()! }} ). –

+0

Oui, même avec seulement \t '$ (". Numeric "). Keydown (fonction (événement) {event.preventDefault();});' n'importe quel caractère est tapé sauf les caractères spéciaux avec la touche Alt [☺☻ ♥ ♦ ♣ By • ◘ ○] – Ivan

3

Essayez ci-dessous le code fonctionnera sur chaque navigateur ou si vous souhaitez utiliser la bibliothèque puis visitez ce lien: https://github.com/tzuryby/jquery.hotkeys

$("#txtmy").keypress(function(event) { 
 
    if (event.which.toString().length > 3) { 
 
    event.preventDefault(); 
 
    return; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="txtmy"/>