2010-10-06 22 views
3

Je veux capturer les caractères d'entrée dans la zone de texte, les convertir ensuite en fonction d'une table et les replacer dans la zone de texte en tant que types d'utilisateurs.javascript - capture des caractères d'entrée et de conversion

<form id='myForm'> 

Enter phone number:<input type="text" id='idMyText' name="myText" onKeyUp="alphaToNum(this.value)"> 
</form> 




<script> 
// on each keypress in input box, I want to capture key pressed, 
// determine if key pressed belong to group of identified characters 
// if, so then convert to specified numeric equivalent and return character 
// to text box. 
// This mapping corresponds to numeric characters on blackberry device. 
// Normally user has to press alt+letter to get numbers. This will provide 
// quicker access to numeric characters on for numeric fields 

function alphaToNum(e) { 
x = e; 
x = (x.replace(/W/, "1")); 
x = (x.replace(/E/, "2")); 
x = (x.replace(/R/, "3")); 
x = (x.replace(/S/, "4")); 
x = (x.replace(/D/, "5")); 
x = (x.replace(/F/, "6")); 
x = (x.replace(/Z/, "7")); 
x = (x.replace(/X/, "8")); 
x = (x.replace(/C/, "9")); 
document.getElementById('idMyText').value = x; 
} 

</script> 
+0

Une remarque, dont vous êtes probablement au courant, mais juste pour référence future: lorsque vous validez, ou assurez certains jeux de caractères par JavaScript, c'est à peu près la même chose que pas de validation. Vous devriez le traiter seulement comme un bon service pour les utilisateurs, mais jamais comme une protection contre la publication de certains caractères. Une telle validation doit toujours être accompagnée d'une validation sur le serveur. – berkes

+0

oui, merci. – robert

Répondre

6

Devrait faire l'affaire. travaille maintenant où caret est et même lorsque vous copiez/collez WECZ dans le champ (si cela importe)

var conversionMap = {W:1,E:2,R:3,S:4,D:5,F:6,Z:7,X:8,C:9}; 
function alphaToNum(){ 
    var field = document.getElementById('idMyText'); 
    var value = field.value.split(''); 
    var i = 0, len = value.length; 

    for(i;i<len;i++){ 
     if (conversionMap[value[i]]) { 
      value[i] = conversionMap[value[i]]; 
     } 
    } 
    field.value = value.join(''); 
    // prevent memory leak. 
    field = null; 
} 

** Modifier après commentaire Tim Downs **

+1

Cela ne fonctionnera pas si le curseur n'est pas à la fin du texte d'entrée. –

+0

Bonne pêche Tim. – BGerrissen

+0

bonne réponse. remercier! – robert

0

Il peut être préférable de le faire lorsque la valeur change dans l'entrée, plutôt que lorsque la touche est enfoncée. Sinon, d'autres formes d'entrée (valeur de collage) contournent cette substitution.

+0

préfère sur l'événement de presse clé parce que les utilisateurs vont attraper plus rapidement. Je ne suis pas trop inquiet à propos de couper et coller car cela est utilisé principalement sur les appareils Blackberry. – robert

0

devrait faire l'affaire. Maintenant, fonctionne partout où caret est et même lorsque vous copiez/collez WECZ dans le champ (si cela importe)

var conversionMap = {W:1,E:2,R:3,S:4,D:5,F:6,Z:7,X:8,C:9}; 
function alphaToNum(){ 
    var field = document.getElementById('idMyText'); 
    var value = field.value.split(''); 
    var i = 0, len = value.length; 

    for(i;i<len;i++){ 
     if (conversionMap[value[i]]) { 
      value[i] = conversionMap[value[i]]; 
     } 
    } 
    field.value = value.join(''); 
    // prevent memory leak. 
    field = null; 
} 

son travail bien jusqu'à ce que nous n'avons pas utilisé UTF-8 caractères comme öéáí etc ... toute idée réparer cette "fuite"?