Следующий фрагмент делает то, что я хочу для input
, т.е. удаляет все небуквенные символы, преобразует их в верхний регистр и сохраняет позицию курсора.
element = $(element);
element.keyup(function() {
var x = element.val();
var y = x && x.toUpperCase().replace(/[^A-Z\d]/g, '');
if (x===y) return;
var start = this.selectionStart;
var end = this.selectionEnd + y.length - x.length;
element.val(y);
this.setSelectionRange(start, end);
});
Я разместил этот фрагмент в link
директивы, и он работает... в основном.
Проблема заключается в том, что модель angular
видит значение до того, как будет применено изменение. Я попытался использовать Google для использования $apply
или $digest
или что-то здесь, но ничего не получилось.
(На самом деле, я каким-то образом справился с этим, но потом содержимое было повторно отображено, и я потерял позицию. Я не могу воспроизвести его, но это было недостаточно.)