1

この質問がいたるところにあることは知っていますが、これは私を夢中にさせています!!!

これが私のコードです:

$(document).ready(function () {

        $('#MainContent_LoginUser_Password').keypress(function (e) {

            noCapsLock($('#MainContent_LoginUser_Password'), e, "Please turn off Caps Lock");
        });

    });
function noCapsLock(o, e, str) {
var s = String.fromCharCode(e.which);
if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) {
    alert(str);
    o.val('');

}     
}

指定された ID のテキスト ボックスの値をクリアしようとしています。上記のコードはテキストをクリアしますが、新しいキーが押されると、そのキーの値が表示されます (大文字)。change()、keyup()、keydown() 関数を試しましたが、最後に入力した値のテキスト ボックスがクリアされないようです。

どんな助けでも大歓迎です。ありがとうございました!

4

3 に答える 3

1

あなたはただイベントをキャンセルする必要がありますe.preventDefault();

function noCapsLock(o, e, str) {
    var s = String.fromCharCode(e.which);
    if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) {
        e.preventDefault();
        alert(str);
        o.val('');
    }     
}
于 2013-03-18T21:46:37.953 に答える
1

を追加するだけです。event.preventDefault();

関数をクロージャ内に配置して、グローバルにならないようにすることもできます。メソッド内で html 要素を再度検索する必要はありません。

$(document).ready(function () {

    var noCapsLock = function(o, e, str) {
        var s = String.fromCharCode(e.which);
        if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) {
            alert(str);
            o.val('');
            e.preventDefault();
        }     
    }    

    $('#MainContent_LoginUser_Password').keypress(function (e) {
        noCapsLock($(this), e, "Please turn off Caps Lock");
    });
});

キックのために、コードを任意の要素に簡単に適用できるjQueryプラグインにもしました(値を削除するのではなく、キープレスを停止するだけです):

(function($) {
    $.fn.noCapsLock = function(message) {
        this.keypress(function (e) {
            var char = String.fromCharCode(e.which);
            if (char.toUpperCase() === char && char.toLowerCase() !== char && !e.shiftKey) {
                window.alert(message);
                e.preventDefault();
            }         
        });
    };
})(jQuery);

次のように適用します。

$(document).ready(function () {
    $('#MainContent_LoginUser_Password').noCapsLock('Please turn off Caps Lock!');
});
于 2013-03-18T21:46:11.127 に答える
1

あなたの場合、テキストボックスをクリアしません。ユーザーが小文字で長いテキストを入力し、CapsLock を押してから入力を続けると、入力全体が削除されます。

関数に関しては、イベントのpreventDefault()メソッドを呼び出すか、返すfalseことができます (メソッドの違いについては、こちらを参照してください)。

    $(document).ready(function () {

        $('#MainContent_LoginUser_Password').keypress(function (e) {
           return noCapsLock(e, "Please turn off Caps Lock");
        });

    });
    function noCapsLock(e, str) {
        var s = String.fromCharCode(e.which);
        if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) {
            alert(str);
            return false;
        }
        return true;
    }
于 2013-03-18T21:52:39.097 に答える