此角度指令在数字输入字段中每三位数自动插入逗号(例如“1000”变为“1,000”)。它在我测试的所有浏览器中都正确保留了光标位置,除了三星键盘的三星手机,例如运行Android 7.0的Galaxy S8,三星体验版本8.1。
在三星上,如果我输入“1000”,则会插入逗号,我的光标会在数十位和一位之间结束,而它应该一直向右。
是否有针对此问题的已知修复程序?
angular.module('someWebApp')
.directive('commaInput', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModelController) {
var el = element[0];
function clean(x) {
while (x.toString().indexOf(",") != -1)
{
x = x.replace(",", "");
}
return x.replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
ngModelController.$parsers.push(function(val) {
var cleaned = clean(val);
// Avoid infinite loop of $setViewValue <-> $parsers
if (cleaned === val) return val;
var start = el.selectionStart + cleaned.length - val.length;
var end = el.selectionEnd + cleaned.length - val.length;
// element.val(cleaned) does not behave with
// repeated invalid elements
ngModelController.$setViewValue(cleaned);
ngModelController.$render();
el.setSelectionRange(start, end);
return cleaned;
});
}
}
});
html输入使用此指令(逗号输入)并具有type =“tel”。
答案 0 :(得分:0)
这似乎是某些设备的问题。我在Samsung S7设备上遇到了类似的问题。我唯一可行的解决方案是将setSelectionRange()
方法推入setTimeout()。
setTimeout(() => {
el.setSelectionRange(selStart, selEnd);
});
可以忽略setTimeout方法上的millisecond
参数,因为我们无需等待执行。