Обновление поля в ходе набора
var input = document.getElementById('input');
input.oninput = liveFieldUpdate.bind(input, toUpper);
function liveFieldUpdate (updateFunction) {
var start = this.selectionStart;
var end = this.selectionEnd;
var newValue = updateFunction(this.value);
if (newValue !== this.value && newValue.length != this.value.length) {
start -= 1;
end -= 1;
}
this.value = newValue;
this.setSelectionRange(start, end);
}
function toUpper (val) {
return val.toUpperCase();
}
<input type="text" id="input">