使用JQuery实时利用用户输入的第一个字符

我试图自动大写用户输入的textarea /输入的第一个字符。 第一次尝试看起来像这样:

$(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/ )。 我想在keydown而不是keyup上运行我的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); } }); }); 

我不确定为什么这不起作用 – 我在这里缺少什么?

这是我制作的小提琴,可以在Chrome中执行您想要的操作。 我不确定它是否适用于其他浏览器。

码:

 $(document).ready(function() { $('input').on('keydown', function(event) { if (this.selectionStart == 0 && event.keyCode >= 65 && event.keyCode <= 90 && !(event.shiftKey) && !(event.ctrlKey) && !(event.metaKey) && !(event.altKey)) { var $t = $(this); event.preventDefault(); var char = String.fromCharCode(event.keyCode); $t.val(char + $t.val().slice(this.selectionEnd)); this.setSelectionRange(1,1); } }); }); 

在这种情况下使用CSS要容易得多:

 input{ text-transform: capitalize; } 

更新 :如果您不想将每个单词的第一个字母大写,而只是将第一个单词的第一个字母大写,则此方法有效:

 input::first-letter{ text-transform: uppercase; } 

试试这个:

 $(document).ready(function() { $('input').on('keydown', function(e) { if (this.value == '') { var char = String.fromCharCode(e.which); if (char.match(/^\w$/)) { // If is empty and we pressed a printable key... this.value = char.toUpperCase(); return false; } } }); }); 

请参阅此处使用。

这对我有用。

 $('input').keyup(function() { $(this).val($(this).val().substr(0, 1).toUpperCase() + $(this).val().substr(1).toLowerCase()); }); 

你可以使用jQuery函数:

 $.fn.CapitalizeFirst = function () { return this.each(function () { $(this).on('keydown', function (event) { if (this.selectionStart == 0 && event.keyCode >= 65 && event.keyCode <= 90 && !(event.shiftKey) && !(event.ctrlKey) && !(event.metaKey) && !(event.altKey)) { var $t = $(this); event.preventDefault(); var char = String.fromCharCode(event.keyCode); $t.val(char + $t.val().slice(this.selectionEnd)); this.setSelectionRange(1, 1); } }); }); }; 

工作jQuery。 导入jQuery后,请确保编写以下代码:

  

这在前一个post中讨论过。 如何在JavaScript中创建字符串大写的第一个字母?

您可以在输入第一个单词后获取用户输入,或者在您需要时使用上面链接中讨论的方法重置值。

 $('selector').blur(function(){ $(this).val($(this).val().charAt(0).toUpperCase()+$(this).val().slice(1)); });