2012-12-07 36 views
0

我必須將TextArea的長度限制爲2個字符。我發現了很多答案。閱讀這些答案我已經達到了以下代碼。它有'keydown'和'keyup'事件處理程序。使用jQuery限制文本區域長度的代碼有什麼缺陷?

  1. 你認爲這是正確的嗎?
  2. 它可以在所有主流瀏覽器中使用嗎?

http://jsfiddle.net/Lijo/VAYze/1/

  1. 注:我不需要一個錯誤信息顯示。因此正則表達式驗證對我來說不是一個好選擇。
  2. 注:我基於現有代碼尋找答案 - 不是一個全新的答案
  3. 注:鍵碼從http://www.asquare.net/javascript/tests/KeyCode.html簡稱和http://www.asquare.net/javascript/tests/KeyCode.html

UPDATE

要處理文本dragged成文本區域,我沒有看到一個jQuery解決方案。我打算做regular expression validatorEnableClientScript =「false」。它將僅在服務器端進行驗證。這是爲了處理繞過現有jQuery操作的任何事情。 ASP Regular Expression Validator for Multi-line textbox

jQuery的

$(document).ready(function() { 


var maxLength = 2; 

$('.multiline').keydown(function (e) { 


    var existingText = $(this).val(); 
    var existingLength = existingText.length; 

    if (existingLength >= maxLength) 
    { 
     if (maxLength > 0) 
     { 

      if (!checkSpecialKeys(e)) 
      { 
       $(this).val(existingText.substring(0, maxLength)); 
       $(this).css('color','red'); 

       //Newly entered character not rendered since false is returned 
       e.preventDefault(); 
      } 
     } 
    } 

    }); 


//To trim the text if a paste happens 
$('.multiline').keyup(function (e) { 

    var newText = $(this).val(); 
    var newLength = newText.length; 

    if (newLength > maxLength) { 
     if (maxLength > 0) { 
      $(this).val(newText.substring(0, maxLength)); 
      $(this).css('color','red'); 
     } 
    } 

}); 


} 
); 


function checkSpecialKeys(e) 
{ 
if (e.keyCode >= 48 && e.keyCode <= 90) 
{ 
    return false; 
} 

if (e.keyCode >= 96 && e.keyCode <= 111) 
{ 
    return false; 
} 

else 
{ 
    return true; 
} 
} 
+1

值可以通過拖動字面上裏面他們選中的文本來填充。不要忘記這種可能性。 – inhan

+0

爲什麼不使用maxlenght屬性? – Stefan

+0

它最終需要失去焦點,所以你可能想附加一個** change **事件,這顯然會觸發:'$('。multiline')。change(function(){console.log('changed!') })' – inhan

回答

1

從你的質量要求,我只能說,你應該在你的textarea的使用maxlength屬性。這節省了您的JavaScript代碼,照顧特殊情況,例如將文本拖入輸入內容。 由於它是瀏覽器功能,因此速度更快。 它支持所有支持textarea的瀏覽器。

實施例:

<textarea maxlength="2"></textarea> 

最大長度是用於textarea的一個新的屬性。它不是在所有的瀏覽器supporetd ...(Source

的輸入和文字區域對不起

+0

我不認爲它適用於'IE8'。你在IE8中試過嗎?http://jsfiddle.net/Lijo/VAYze/2/ – Lijo

+0

是的,我已經更正了我的答案.... – Stefan