我有一个函数可以将文本转换为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中测试过,它运行正常。
请帮帮我
答案 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:
只需申请
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