我的日语号有问题。当由IME输入时,ngModel被复制。
这是我第一次与日语合作,所以我目前不知道为什么会这样。我正在寻找你对这个问题的体验。
ngModel.$parsers.unshift(function(inputValue){
var digits = String(inputValue).split('').filter(function (s) { return (!isNaN(s) && s != ' '); }).join('');
ngModel.$viewValue = digits;
ngModel.$render();
return digits;
});
以下是示例:http://jsfiddle.net/x0ervzr2/
*注意:在jsfiddle上我无法通过IME输入(也许是禁用?)
谢谢。
答案 0 :(得分:1)
您正在通过JavaScript设置元素值,而IME也会尝试在合成完成时设置它。实际行为因浏览器而异。谷歌浏览器一起接受你的JS值(300)和IME值(300),这就是300300的来源。
您可以使用以下jsfiddle测试此行为:
https://jsfiddle.net/bootleq/x14w3Lts/4/embedded/result/
一种解决方法是使用setTimeout
将JS setter执行延迟到IME compositionend,如小提琴所示。
在angular或jsfiddle中没有任何问题,如果没有在angular $ parsers函数中执行$render
,一切正常。