我有一个数字格式化的角色。
我需要将光标放在我执行插入或删除数字的位置。
目前在插入或删除后,光标会被追加到最后(我不需要这种行为,我希望光标留在那里)
// This runs when we update the text field
ngModelCtrl.$parsers.push(function(viewValue) {
return viewValue.replace(/,/g, '');
})
我的工作代码请随意从here
分叉答案 0 :(得分:1)
您可以使用输入字段的selectionStart
和selectionEnd
属性来获取当前光标位置,然后使用setSelectionRange()
方法在值更新后设置它(请参阅{ {3}}用于API参考)。
为此,您可以修改keydown
事件处理程序以存储更改前的值(包括逗号)和光标位置:
$element.bind('keydown', function(event) {
// Store previous value (including commas) and cursor position
prevVal = $element.val();
start = $element[0].selectionStart;
end = $element[0].selectionEnd;
if (key == 46) {
// Delete pressed, so increment cursor position
start++;
end++;
}
...
});
如果按下删除键(而不是退格键),上面的代码会增加光标位置,因为光标位置将保持不变(当然考虑到货币格式化逗号)。
然后可以修改listener
函数以计算货币值的长度差异(包括格式化逗号)并在键入密钥后相应地设置光标位置:
var listener = function() {
...
// Calculate new cursor position and update
var diff = $element.val().length - prevVal.length;
$element[0].setSelectionRange(start+diff, end+diff);
....
}
有关正常工作的演示,请参阅here。