JQuery keyup阻止Chrome中的文本选择。怎么解决?

时间:2012-10-04 01:10:31

标签: jquery google-chrome onkeyup

我有一个函数可以将文本转换为keyup上的大写。代码看起来像这样(我想我也发现了它):

$(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中测试过,它运行正常。

请帮帮我

2 个答案:

答案 0 :(得分:2)

其中一种可能的解决方案是不改变每个键盘的值,而只是在值实际发生变化时:

$('#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中查看。

答案 1 :(得分:2)

这里有一个很好的解决方案只使用css:

http://jsfiddle.net/46jrg/

只需申请

text-transform: uppercase

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

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

Java有String::toUpperCase

PHP具有strtoupper函数

Python有String::upper

Ruby有String::upcase

Perl具有uc功能

Javascript有String::toUpperCase

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