0

数字を受け入れる入力フィールドがあります。日本語の数字のキーを押したとき。それらを対応する英語の数字に置き換える必要があります。

以下の関数を使用していますが、単一のインスタンスでは実行していますが、複数のエントリでは失敗しています。

$('input[data-type=number], input[data-type=day]').keyup(function(){debugger;
    var inputVal = $(this).val();

    var result = '{"1":"1", "2":"2", "3":"3", "4":"4", "5":"5", "6":"6", "7":"7", "8":"8", "9":"9", "0":"0"}';

    $.each($.parseJSON(result), function(k, v) {
        console.log(k +' is '+ v);
        if(inputVal === k){
            inputVal = v;
        }
    });

    $(this).val(inputVal);
});

すでにカバーされている価値をそのまま維持する必要があります。例えば、1と入力すると1に変換されますが、再度13と入力するとそのまま入力ボックスに残ります。

4

2 に答える 2

0

問題はinputVal === k確認済みです。入力値全体を単一の文字に一致させようとしています。

$('input[data-type=number], input[data-type=day]').keyup(function() {
  var inputVal = $(this).val()
  var inputLastChar = inputVal.substr(-1);

  var mapping = {
    "1": "1",
    "2": "2",
    "3": "3",
    "4": "4",
    "5": "5",
    "6": "6",
    "7": "7",
    "8": "8",
    "9": "9",
    "0": "0"
  }

  matchedChar = null
  $.each(mapping, function(k, v) {
    if (inputLastChar === k) {
      console.log(k +' is '+ v);
      matchedChar = v;
    }
  });

  if (matchedChar) {
    $(this).val(inputVal.substr(0, inputVal.length - 1) + matchedChar);
  }
});

いくつかのメモ:

  • JSON 文字列を作成して解析する必要はありません。上記の例のように、マッチング用のオブジェクトを作成するだけです。
  • 私の例はオリジナルを書き直しただけなので、入力フィールドのテキストもチェックしますが、別のアプローチを使用することをお勧めします。イベントから入力文字をチェックし、修正した値を入力フィールドに挿入します。これにより、入力フィールドで文字が点滅する問題や、十分に速く入力した場合に一部の文字が変更されない問題が解決されます。
于 2013-06-19T11:52:40.907 に答える
0

これは、配列内の入力値全体を検索しているためですが、配列には単一の値が含まれているためです。したがって、このように1桁で機能します。各値に対してグローバル置換を使用できます。

var str="12322";
var n=str.replace(/1/g,"1").replace(/2/g,"2");
//n will be: 12322

もっとエレガントな方法があるかもしれませんが、これでうまくいくはずです。

jsFiddle で起動しています

于 2013-06-19T11:46:09.057 に答える