ユーザーが入力したテキストエリア/入力の最初の文字を自動大文字化しようとしています。最初の試行は次のようになりました。
$(document).ready(function() {
$('input').on('keydown', function() {
if (this.value[0] != this.value[0].toUpperCase()) {
// store current positions in variables
var start = this.selectionStart;
var end = this.selectionEnd;
this.value = this.value[0].toUpperCase() + this.value.substring(1);
// restore from variables...
this.setSelectionRange(start, end);
}
});
});
これに関する問題は、小文字を表示してからそれを修正することです。これは醜いです ( http://jsfiddle.net/9zPTA/2/ )。キーアップではなくキーダウンで JavaScript を実行し、実行中のイベントを変換します (またはインターセプトし、デフォルトを防止し、変更された新しいイベントをトリガーします)。
これが私が今持っているものですが、動作しません( http://jsfiddle.net/9zPTA/5/ ):
$(document).ready(function() {
$('input').on('keydown', function(event) {
if (this.selectionStart == 0 && event.keyCode >= 65 && event.keyCode <= 90 && !(event.shiftKey)) {
event.preventDefault();
var myEvent = jQuery.Event('keypress');
myEvent.target = event.target;
myEvent.shiftKey = true;
myEvent.keyCode = event.keyCode;
$(document).trigger(myEvent);
}
});
});
これが機能しない理由がわかりません - ここで何が欠けていますか?