输入字段日语值需要替换为英语数字值

时间:2013-06-19 10:51:08

标签: jquery html replace

我有一个输入字段,它接受数字;用日语数字按键;我需要用相应的英文数字替换它们。

我正在使用以下功能,但它正在为单个实例做,但多个条目失败。

$('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时,它将保持原样在输入框中。

2 个答案:

答案 0 :(得分:0)

这是因为您正在搜索数组中的整个输入值,但该数组包含单个值。所以它将以这种方式使用单个数字。 您可以对每个值使用全局替换:

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

也许有更优雅的方式,但这应该有用。

这是在jsFiddle

答案 1 :(得分: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字符串,然后解析它。您可以创建匹配对象,如上例所示。
  • 我的示例只是对原始内容的重写,因此它还会检查输入字段中的文本,但最好使用另一种方法:检查事件中的输入字符,然后将更正后的值插入输入字段。这将解决输入字段中闪烁字符的问题,如果键入足够快,则某些字符不会改变。