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());
});

問題

shiftChrome では、テキストを入力して+を使用して選択しようとするとhome、カーソルが最後の文字に戻り、何も選択されません。

Firefox と IE でもテストしましたが、問題なく動作しています。

私を助けてください

4

2 に答える 2

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 に答える
2

考えられる解決策の 1 つは、すべてのキーアップで値を変更するのではなく、値が実際に変更されたときだけ変更することです。

$('#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 に答える