4

我有一个将文本转换为大写的函数keyup。代码看起来像这样(我想我也在 SO 上找到它):

$(selector).bind('keyup', function (e) {
  if (e.which >= 97 && e.which <= 122) {
    var newKey = e.which - 32;
    e.keyCode = newKey;
    e.charCode = newKey;
  }
  $(this).val((object.val()).toUpperCase());
});

问题

在 Chrome 中,当我键入一些文本然后尝试使用shift+选择它home时,光标会回到最后一个字符,而不是选择任何内容。

我还在 Firefox 和 IE 中进行了测试,它工作正常。

请帮我

4

2 回答 2

2

一种可能的解决方案不是在每个 keyup 上都更改值,而是在值实际更改时更改:

$('#input').bind('keyup', function(e) {

    if (e.which >= 97 && e.which <= 122) {
        var newKey = e.which - 32;
        e.keyCode = newKey;
        e.charCode = newKey;
    }

    var oldVal = $(this).val();
    var newVal = oldVal.toUpperCase();

    if(oldVal != newVal)
    {
        $(this).val(newVal);
    }

});​

JSFIDDLE中查看。

于 2012-10-10T13:25:13.933 回答
2

这里有一个只使用 css 的不错的解决方案:

http://jsfiddle.net/46jrg/

只需申请

text-transform: uppercase

到文本输入区域,然后您不必担心那些复杂的 javascript 内容。更少的代码意味着更少的错误!:)

编辑:当您选择并复制文本时,它仍将大写,但如果您将其提交到服务器,则必须在发送之前将其大写或在到达那里时将其大写。不过,这通常没什么大不了的。大多数常见的服务器端语言都可以在单个方法调用中完成。

Java有String::toUpperCase

PHP有这个strtoupper功能

Python有String::upper

红宝石有String::upcase

Perl有这个uc功能

Javascript有String::toUpperCase

C#.NET / VB.NET 有String::ToUpper

于 2012-10-10T13:27:26.470 回答