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

JSP*_*P64 9 javascript string jquery javascript-events

我试图自动大写用户输入的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);
    }
 });
});
Run Code Online (Sandbox Code Playgroud)

这个问题是它显示小写字符,然后纠正它,这是丑陋的(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);
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

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

Bor*_*sch 28

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

input{
    text-transform: capitalize;
}
Run Code Online (Sandbox Code Playgroud)

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

input::first-letter{
    text-transform: uppercase;
}
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并没有将输入大写.它只是让它看起来像是大写的.提交表单,发送到服务器的值是原始值,不一定是大写值.这不回答用户的问题.它为什么有这么多票? (8认同)
  • 这大写每个单词的第一个字母. (3认同)

Sha*_*ded 12

是我制作的小提琴,可以在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);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)