2013-03-08 71 views
1

我试图阻止用户在字符数达到特定值时向textarea输入任何更多输入。jQuery preventDefault无法在任何IE版本中工作

我的代码在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); 
} 
+0

IE的哪个版本和jQuery的哪个版本?这对我的作品在IE 8和9 – 2013-03-08 09:57:21

+0

尝试使用stopPropagation()也更新您的jQuery的lib文件... – SaurabhLP 2013-03-08 09:58:11

+0

@ s.lenders - 我和jQuery1.7.2 – 2013-03-08 10:00:16

回答

2

变化从keyup到​​的情况下,它会工作

演示:Fiddle与KEYUP

演示:Fiddle用的keydown

按键事件将无法工作since IE and Chrome does not fire it on backspace and delete

注意:柜台的表现仍然很奇怪。

有一些可以自live来完成,从live前转会到on更多的变化已被弃用

+0

任何想到为什么keydown可以运行并且不能使用keyup?按照你的建议,Keydown表现得很奇怪。目前正在使用keydown解决方案,将有一些体面的用户体验! – 2013-03-08 14:18:25

+0

我想,这是因为在处理'keyup'时,按下的键已经被添​​加到了输入值,所以你不能恢复它 – 2013-03-08 15:09:55

1

live折旧和使用keypress

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