我有一个输入字段,它接受数字;用日语数字按键;我需要用相应的英文数字替换它们。
我正在使用以下功能,但它正在为单个实例做,但多个条目失败。
$('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时,它将保持原样在输入框中。
答案 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);
}
});
一些注意事项: