2012-12-07 35 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