11

我在输入时使用以下代码转换为大写。

      $(".input_capital").live('keypress', function(e)
      {
        var defaultStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        var checkstr = $(this).val();
        var str1 = '';
        for (i = 0; i < checkstr.length; i++)
        {
            var ch = checkstr.charCodeAt(i);
             if (ch>=97 && ch<=122){
                str1 += defaultStr.charAt(ch-97);
             }else{
                str1 += checkstr.charAt(i);
              }
        }
        $(this).focus();
        $(this).val(str1);
     });

以及以下代码

  $(".input_capital").live('keypress', function(e)
  {
       $(this).val($(this).val().toUpperCase());
  });

所有这些上面的代码工作正常。但是对于能够在一段时间内查看小写字母的用户。之后只有它转换为大写。

我尝试text-transform: uppercase在 css 中使用 ''。但它不适用于带有 Android 操作系统的三星标签。请任何人帮助我通过脚本实现这一目标。

4

9 回答 9

24

Note: This answer is without delay..if you like to avoid Jquery

尝试

<input type="text" style="text-transform: uppercase">

演示 - JSFiddle

于 2015-11-25T13:46:41.327 回答
23

你可以试试:

$(".input_capital").on('keydown', function(evt) {
  $(this).val(function (_, val) {
    return val + String.fromCharCode(evt.which).toUpperCase();
  });

  return false;
});​

http://jsfiddle.net/5gLyX/

它有一些缺陷,但我认为这个想法很明确,可以在此基础上进行构建。


更好的版本,但请注意inputIE<9 中不支持的事件。

$('.input_capital').on('input', function(evt) {
  $(this).val(function(_, val) {
    return val.toUpperCase();
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class='input_capital' rows='8'></textarea>

于 2012-10-31T10:11:51.953 回答
5

如果您不关心 ie<9 ,请听“输入”事件

$(".input_capital").bind("input", function(e){
   this.value = this.value.toUpperCase();
});

对于 IE<9,请改用“keyup”

演示:http: //jsfiddle.net/MupXZ/6/

于 2012-10-31T10:05:24.080 回答
2

如何使用 keyup 而不是 keypress。

$(".input_capital").live('keyup', function(e)
  {
       $(this).val($(this).val().toUpperCase());
  });

因此,一旦松开键,最后一个字母就会改变。

像这样:http: //jsfiddle.net/mNVXK/

于 2012-10-31T10:27:40.573 回答
1

为什么你不添加这一行

$(this).val($(this).val().toUpperCase());

以前$(this).focus();?并使用on()而不是live()

于 2012-10-31T10:01:30.167 回答
1

扩展@Yoshi的答案

这个扩展负责:

退格: 8
Tab: 9
Enter: 13
箭头键: 37,38,39,40

$(".input_capital").bind('keydown', function(event) {
    if ( $.inArray( event.keyCode, [8,9,13,37,38,39,40]) === -1 ) {
        $(this).val(function(i, val) {
            return val + String.fromCharCode(event.keyCode).toUpperCase();
        });
        return false;
    }
});

使用bind原因OP正在使用jQuery 1.5.1

于 2012-10-31T10:34:54.253 回答
0

尝试:

$(".input_capital").live('keypress', function(e) {
    setInterval("$(this).val($(this).val().toUpperCase())",100);      
});
于 2012-10-31T09:59:04.113 回答
0

对于那些使用更高版本的 jquery 的用户,请使用 on 替换 live。例如。

 $(".input_capital").live('keyup', function(e)  {
   $(this).val($(this).val().toUpperCase());
});

就是现在

$(".input_capital").on('keyup', function(e)  {
   $(this).val($(this).val().toUpperCase());
});
于 2014-05-22T20:28:34.410 回答
0

js

$('.input_capital').on('blur', function(evt) {
  $(this).val(function (_, val) {
    return val.toUpperCase();
  });
});

html

<input type="text" class="input_capital" style="text-transform: uppercase" />

按照这个:http: //jsfiddle.net/5gLyX/389/

于 2016-11-29T12:00:48.273 回答