JavaScript-入力をキャプチャして文字を変換します
-
28-09-2019 - |
質問
テキストボックスで入力charターをキャプチャし、テーブルに従って変換して、ユーザータイプとしてテキストボックスに戻したいと思います。
<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>
解決
トリックをする必要があります。 CARETがどこにいても、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;
}
**ティムダウンズのコメントの後に編集**
他のヒント
キーが押されたときではなく、入力の値が変化したときにこれを行う方が良いかもしれません。それ以外の場合、他の形式の入力(貼り付け価値)がこの置換をバイパスします。
トリックをする必要があります。 CARETがどこにいても、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 charsを使用しなくなるまで、それはうまく機能しています...この「漏れ」を修復するためのアイデアはありますか?
所属していません StackOverflow