Javascript-String-Objekte haben eine toLocaleUpperCase()Funktion, die die Konvertierung selbst vereinfacht.
Hier ist ein Beispiel für die Live-Großschreibung:
$(function() {
$('input').keyup(function() {
this.value = this.value.toLocaleUpperCase();
});
});
Leider wird dadurch der Inhalt des Textfelds vollständig zurückgesetzt, sodass die Caret-Position des Benutzers (wenn nicht "das Ende des Textfelds") verloren geht.
Sie können dies jedoch mit etwas Magie des Browserwechsels wieder einhacken:
function getCaretPosition(ctrl) {
var CaretPos = 0;
if (document.selection) {
ctrl.focus();
var Sel = document.selection.createRange();
Sel.moveStart('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
else if (ctrl.selectionStart || ctrl.selectionStart == '0') {
CaretPos = ctrl.selectionStart;
}
return CaretPos;
}
function setCaretPosition(ctrl, pos) {
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
$(function() {
$('input').keyup(function() {
var caretPosition = getCaretPosition(this);
this.value = this.value.toLocaleUpperCase();
setCaretPosition(this, caretPosition);
});
});
Letztendlich könnte es am einfachsten sein, es zu fälschen. Stellen Sie den Stil text-transform: uppercasefür das Textfeld so ein, dass er dem Benutzer in Großbuchstaben angezeigt wird. Wenden Sie dann in Ihrem Javascript die Textumwandlung einmal an, wenn der Caret-Fokus des Benutzers das Textfeld vollständig verlässt:
HTML:
<input type="text" name="keywords" class="uppercase" />
CSS:
input.uppercase { text-transform: uppercase; }
Javascript:
$(function() {
$('input').focusout(function() {
this.value = this.value.toLocaleUpperCase();
});
});
Hoffe das hilft.