2013-03-08 76 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); 
    });