2

当字符数达到某个值时,我试图阻止用户在文本区域中输入更多输入。

我的代码在 Chrome、Safarai 和 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,它将起作用

演示:拨弄键盘

演示:用keydown摆弄

keypress 事件将不起作用,因为 IE 和 Chrome 不会在退格和删除时触发它

注意:计数器仍然表现异常。

还有一些可以做的改变,ex move from liveto onsincelive已弃用

于 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 回答