我正在使用ngModelController
使用input
元素进行格式化。但是,如果用户试图在开头或中间输入任何数字,我就无法设置插入位置。因为插入符号总是跳到最后。
调用设置光标的最佳位置是什么?
ngModelController.$parsers.unshift(function (viewValue) {
var plainNumber = viewValue.replace(/ /g, '');
// $log.info(`viewValue = ${viewValue}`);
console.log(`$modelValue = ${ngModelController.$modelValue} | $viewValue = ${ngModelController.$viewValue}`);
console.log(`cursorPos = ${cursor.getCursorPos(elem[0])}`);
var newVal = ""
for (var i = 0; i < plainNumber.length; i++) {
if (i === 3 || i === 6) {
newVal += " ";
}
newVal += plainNumber[i];
}
cursor.setCursorPos(cursor.getCursorPos(elem[0]) + 1, elem[0]);
// $log.info(`newVal = ${newVal}`);
elem.val(newVal);
return plainNumber;
});
答案 0 :(得分:0)
类似的问题:
Preserving cursor position with angularjs
但是我添加了以下代码,可能对其他人有用。
ngModelController.$parsers.unshift(function (viewValue) {
var plainNumber = viewValue.replace(/ /g, '');
// $log.info(`viewValue = ${viewValue}`);
console.log(`$modelValue = ${ngModelController.$modelValue} | $viewValue = ${ngModelController.$viewValue} | viewValue = ${viewValue} | cursorPos = ${cursor.getCursorPos(elem[0])} | oldVal = ${oldVal}`);
var newVal = ""
for (var i = 0; i < plainNumber.length; i++) {
if (i === 3 || i === 6) {
newVal += " ";
}
newVal += plainNumber[i];
}
if(newVal === viewValue) {
return viewValue;
}
// $log.info(`newVal = ${newVal}`);
var lastCursorPos = cursor.getCursorPos(elem[0]);
elem.val(newVal);
ngModelController.$setViewValue(newVal);
ngModelController.$render();
//cursor.setCursorPos(cursor.getCursorPos(elem[0]) + 1, elem[0]);
elem[0].setSelectionRange(lastCursorPos + 1, lastCursorPos + 1);
oldVal = newVal;
return plainNumber;
});