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

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

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 回答
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 回答