如何防止用户在达到最大字符限制后在textarea中输入文本

Bas*_*sit 27 jquery

我想阻止用户在达到最大字符限制时在textarea中输入文本.发生了什么,当我达到最大限制然后我的文本区域滚动条移动到顶部我以某种方式阻止这个代码.

jQuery(document).ready(function($) {
    $('textarea.max').keyup(function() {
        var $textarea = $(this);
        var max = 400;
        if ($textarea.val().length > max) {
            var top = $textarea.scrollTop();
            $textarea.val($textarea.val().substr(0, max));
            $textarea.scrollTop(top);

        }
    });
}); //end if ready(fn)
Run Code Online (Sandbox Code Playgroud)

但我也希望在达到最大限制后用户无法在textarea中输入任何内容.目前发生的情况是,如果用户按住键,达到最大限制后,字符在文本区域中键入,虽然在释放按钮后它返回到原始文本(即$ textarea.val($ textarea.val()). substr(0,max));).但是,一旦这种情况成为现实,我希望这样

if ($textarea.val().length > max) {
Run Code Online (Sandbox Code Playgroud)

用户无法输入任何内容.我希望光标从textarea中消失.但是如果用户删除了一些文本,那么光标也可供用户再次输入输入.我该怎么做?

Rob*_*b W 51

keyup发生默认行为(填充文本区域)后,事件将触发.

最好使用该keypress事件,并过滤不可打印的字符.

演示:http://jsfiddle.net/3uhNP/1/(最大长度为4)

jQuery(document).ready(function($) {
    var max = 400;
    $('textarea.max').keypress(function(e) {
        if (e.which < 0x20) {
            // e.which < 0x20, then it's not a printable character
            // e.which === 0 - Not a character
            return;     // Do nothing
        }
        if (this.value.length == max) {
            e.preventDefault();
        } else if (this.value.length > max) {
            // Maximum exceeded
            this.value = this.value.substring(0, max);
        }
    });
}); //end if ready(fn)
Run Code Online (Sandbox Code Playgroud)

  • 当用户输入字符时它会工作.但是当用户复制并粘贴文本时它无法正常工作 (3认同)
  • 谢谢,但是在测试了代码之后。一旦达到最大限制,它将停止。我不能输入一个字。但是,如果我按退格键,那么它也不起作用。至少用户可以选择按退格键删除文本,然后再次开始输入。顺便说一句,这是我想要的行为。达到最大限制后,用户无法输入任何内容。:)我该怎么做,即用户按下Backspace键将其删除,然后再次开始输入文本。谢谢 (2认同)

KBN*_*KBN 30

<textarea maxlength="400"> </textarea>
Run Code Online (Sandbox Code Playgroud)

使用上面的代码来限制插入文本区域的字符数,如果你想禁用textarea本身(即之后将无法编辑)你可以使用javascript/jquery来禁用它.

  • `maxlength`属性是HTML5的新属性,不适用于Internet Explorer或Firefox <4.然而,+1,因为它是一个很好的解决方案. (2认同)