jQuery preventDefault无法在任何IE版本中运行

时间:2013-03-08 09:53:57

标签: jquery internet-explorer preventdefault

当char计数达到一定值时,我想阻止用户在textarea中输入更多输入。

我的代码在Chrome,Safarai和Firefox中运行良好。

但在 IE 的任何版本中, preventDefault 方法无法正常工作

我在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);
}

2 个答案:

答案 0 :(得分:3)

将事件从keyup更改为keydown,它将起作用

使用keyup

进行演示:Fiddle

演示:Fiddle与keydown

按键事件无效since IE and Chrome does not fire it on backspace and delete

注意:计数器仍然表现得很奇怪。

可以进行更多更改,从live移至on,因为live已被弃用

答案 1 :(得分:1)

live已弃用并使用keypress

$('body').delegate(".textarea-char-count","keypress", function(event) {
        MYAPP.COMMON.textareaCounter(this, event);
    });