使用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)); });