【问题标题】:Any pitfalls in code for Restricting TextArea Length using jQuery?使用 jQuery 限制 TextArea 长度的代码中是否存在任何缺陷?
【发布时间】:2012-12-07 09:53:47
【问题描述】:

我必须将 TextArea 的长度限制为 2 个字符。我找到了很多答案。阅读这些答案,我已经达到了以下代码。它具有“keydown”和“keyup”的事件处理程序。

  1. 您认为这是否正确且足够?
  2. 它是否适用于所有主流浏览器?

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

  1. 注意:我不需要显示错误消息。因此,正则表达式验证对我来说不是一个好的选择。
  2. 注意:我正在寻找基于现有代码的答案 - 不是全新的答案
  3. 注意:密钥代码来自http://www.asquare.net/javascript/tests/KeyCode.htmlhttp://www.asquare.net/javascript/tests/KeyCode.html

更新

要将文本dragged 处理到文本区域,我没有看到 jQuery 解决方案。我打算用EnableClientScript="false" 做一个regular expression validator。它将仅在服务器端进行验证。这是为了处理绕过现有 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;
}
}

【问题讨论】:

  • 输入和文本区域的值可以通过在其中拖动选定的文本来填充。不要忘记这种可能性。
  • 为什么不使用 maxlenght 属性?
  • 有琐碎的dragoverdragenterdrop 事件监听器,但我会坚持使用change 事件,因为并非所有这些都被所有浏览器支持,而change AFAIK无论如何都会触发。
  • @Lijo no no 我的建议是添加,而不是更改。保留您的关键事件,只需为更改事件添加一个单独的事件侦听器。
  • 所以&lt;textarea class="multiline" onchange="console.log('changed)"&gt;&lt;/textarea&gt; 在 IE7 中没有做任何事情?抱歉,我使用的是 Mac,所以我无法自己测试。另外,检查inputpropertychange 事件处理程序。我刚刚读到他们herealso here

标签: jquery


【解决方案1】:

根据您的要求,我只能说您应该在 textarea 上使用 maxlength 属性。这可以节省您的 JavaScript 代码,处理特殊情况,例如将文本拖到输入中。 由于它是浏览器功能,因此速度更快。 所有支持 textarea 的浏览器都支持它。

例子:

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

maxlength 是 textarea 的新属性。并非所有浏览器都支持它... (Source)

对不起

【讨论】:

猜你喜欢
  • 2023-01-03
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2011-06-30
相关资源
最近更新 更多