2013-06-19 35 views
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時,它將保持原樣在輸入框中。

+0

嘗試String.prototype.replaceArray但我們不能創建日本數字 – GOK

回答

0

這是,因爲您正在搜索數組中的整個輸入值,但該數組包含單個值。所以它將以這種方式用單個數字來工作。 您可以使用全球每個值替換:

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

也許還有一個更優雅的方式,但這應該工作。

它沃金上jsFiddle

+0

一個陣列我把這個onkeyup事件,但是當我從外地事件的內容就返回到日本格式...:P – GOK

+0

試試吧,請,這是現在工作。 – speti43

+0

在小提琴中,輸入12然後它變成12,但是當你聚焦或點擊外面(模糊)時,它會回到12 – GOK

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字符串,然後解析它。您可以創建匹配對象,如上例所示。
  • 我的例子只是重寫原始的,所以它也檢查輸入字段中的文本,但最好使用另一種方法:檢查事件的輸入字符,然後將校正值插入輸入字段。這將解決輸入字段中閃爍字符的問題,並且如果鍵入的速度夠快,某些字符不會更改。
+0

現在,如果我們輸入13,那麼它只爲最後一個13做 – GOK