2010-10-06 1 views
3

Я хочу, чтобы захватить ввод символов в текстовое поле, конвертировать в соответствии с таблицей и поместить их обратно в текстовое поле как пользовательские типы.javascript - захват ввода и преобразование символов

<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

Sidenote, о котором вы, вероятно, знаете, но только для справок в будущем: когда вы проверяете или выполняете определенные наборы символов через JavaScript, это примерно то же, что и без проверки. Вы должны относиться к нему только как к приятному сервису для пользователей, но никогда не как к защите от определенных персонажей. Такая проверка всегда должна сопровождаться проверкой на сервере. – berkes

+0

да, спасибо. – robert

ответ

6

Должен сделать трюк. теперь работает везде, где есть каретка и даже при копировании/вставки WECZ в поле (если это имеет значение)

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; 
} 

** Редактировать после Tim Downs комментарий **

+1

Это не будет работать, если каретка не находится в конце входного текста. –

+0

Хороший улов Тим. – BGerrissen

+0

отличный ответ. спасибо! – robert

0

Возможно, было бы лучше сделать это, когда значение изменяется на входе, а не при нажатии клавиши. В противном случае другие формы ввода (значение вставки) обходят эту замену.

+0

предпочитают ключевое событие для прессы, потому что пользователи будут быстрее набирать обороты. я не слишком беспокоюсь о вырезании и вставке, потому что это используется в основном на устройствах Blackberry. – robert

0

Если сделать трюк. В настоящее время работает везде, где есть каретка и даже при копировании/вставки WECZ в поле (если это имеет значение)

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; 
} 

его работы хорошо, пока мы не использовали UTF-8 символов, как öéáí и т.д ... любая идея отремонтировать эту «утечку»?