0

我正在使用 inputTextArea。其实我想限制它的最大长度。我正在使用类似的功能

<script type="text/javascript">
    function limitTextArea(element, limit) {
        if (element.value.length > limit) {
            element.value = element.value.substring(0, limit);
        }
    }
</script>

<textarea id="description" name="description" 
          onkeyup="limitTextArea(this, 1000);" 
          onkeydown="limitTextArea(this, 1000)">
</textarea>

但是假设我在 textarea 中写了一个长文本,会发生什么。滚动条显示在文本区域中。但是当我达到最大限制然后尝试写一个字符时,textarea 滚动条会移动到顶部。

我希望一旦用户达到它的最大限制,那么滚动条和光标就会停留在该位置。

为什么当我尝试在最大限制之后写一些东西时,它的行为就像 textarea 滚动条移到顶部?

谢谢

4

3 回答 3

0

参考:如何使用 JavaScript 对 HTML 中的 textArea 施加 maxlength

window.onload = function() { 
  var txts = document.getElementsByTagName('TEXTAREA') 

  for(var i = 0, l = txts.length; i < l; i++) {
    if(/^[0-9]+$/.test(txts[i].getAttribute("maxlength"))) { 
      var func = function() { 
        var len = parseInt(this.getAttribute("maxlength"), 10); 

        if(this.value.length > len) { 
          alert('Maximum length exceeded: ' + len); 
          this.value = this.value.substr(0, len); 
          return false; 
        } 
      }

      txts[i].onkeyup = func;
      txts[i].onblur = func;
    } 
  } 
}
于 2012-05-02T10:31:47.020 回答
0

http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html

您也可以使用它来防止用户在文本区域中写入超出您想要的内容。

于 2012-05-02T10:40:51.557 回答
0

至少此代码可防止我的 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)

这是我得到像这样使用它的想法的参考

如何防止 textarea 在其值更改时滚动到顶部?

更好的解决方案:

jQuery(document).ready(function($) {
    var max = 400;
    $('textarea.max').keypress(function(event) {
        if (event.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) {
            event.preventDefault();
        } else if (this.value.length > max) {
            // Maximum exceeded
            this.value = this.value.substring(0, max);
        }
    }); //end of keypress(fn)
}); //end if ready(fn)

谢谢

于 2012-05-02T12:41:13.050 回答