2

文字数が特定の値に達したときに、ユーザーがテキストエリアにそれ以上入力できないようにしています。

私のコードは、Chrome、Safari、および Firefox で正常に動作します。

しかし、preventDefaultメソッドは、 IEのどのバージョンでも機能しません。

これについてSOで多くの同様のトピックを見つけ、最も一般的な提案を含めました:

  • preventDefault が存在することを確認するためのチェックを実行します。存在しない場合は、IEの returnValue=falseを使用します。問題はreturnValue=falseも機能しないことです。

助言がありますか?

// Attach textarea char counter to all textarea's with class of 'textarea-char-count'
$('.textarea-char-count').live("keyup", function(event) {
    MYAPP.COMMON.textareaCounter(this, event);
}); 

// Attach textarea char counter to element
MYAPP.COMMON.textareaCounter = function(element, evt) {

    //Get char limit
    var limit = $(element).attr("maxlength");

    // get current character count
    var current = $(element).val().length;

    // if current character count is greater than or equal to the character limit
    if(current >= limit) {
        // prevent further characters from being entered apart from the 
        // Delete and Backspace keys
        if(evt.which != 0 && evt.which != 8)
        {
            if (evt.preventDefault) {
                evt.preventDefault();
            }
            else {
                evt.returnValue = false;
            }
        }
    }

    // add the remaining character count to our span
    $(element).parent().next().show().text( current + " / " +  limit);
}
4

2 に答える 2

3

イベントを から に変更するkeyupkeydown、機能します

デモ:キーアップをいじる

デモ:キーダウンをいじる

IE と Chrome はバックスペースと削除でキープレス イベントを発生させないため、キープレス イベントは機能しません。

注: カウンターは依然として奇妙な動作をします。

実行できる変更がいくつかあります。たとえば、からliveへの移動は非推奨になっているonためですlive

于 2013-03-08T10:02:10.673 に答える
1

live減価償却して使うkeypress

$('body').delegate(".textarea-char-count","keypress", function(event) {
        MYAPP.COMMON.textareaCounter(this, event);
    }); 
于 2013-03-08T10:03:38.580 に答える