当前位置: 首页 > 面试题库 >

限制文本区域中的行数

百里涛
2023-03-14
问题内容

我正在寻找可以限制行数的JavaScript(用户指的是某些文本由用户按键盘上的Enter键结束),该用户可以在textarea中输入内容。我找到了一些解决方案,但它们根本无法正常工作或表现得很奇怪。最好的解决方案是可以完成这项工作的jquery插件-
类似CharLimit,但是它应该能够限制文本行数而不是字符数。


问题答案:

可能会
有所帮助(可能最好使用jQuery,onDomReady并毫不干扰地将keydown事件添加到textarea),但已在IE7和FF3中进行了测试

<html>
  <head><title>Test</title></head>
  <body>
    <script type="text/javascript">
      var keynum, lines = 1;

      function limitLines(obj, e) {
        // IE
        if(window.event) {
          keynum = e.keyCode;
        // Netscape/Firefox/Opera
        } else if(e.which) {
          keynum = e.which;
        }

        if(keynum == 13) {
          if(lines == obj.rows) {
            return false;
          }else{
            lines++;
          }
        }
      }
      </script>
    <textarea rows="4" onkeydown="return limitLines(this, event)"></textarea>
  </body>
</html>

*编辑-说明:如果按下ENTER键,它将捕获按键,并且如果textarea中的行与textarea的行数相同,则不添加新行。否则,它将增加行数。

编辑#2: 考虑到人们仍然在回答这个问题,我想我会尽可能地对其进行更新以处理粘贴,删除和剪切。

<html>

<head>
    <title>Test</title>
    <style>
        .limit-me {
            height: 500px;
            width: 500px;
        }
    </style>
</head>

<body>
<textarea rows="4" class="limit-me"></textarea>

<script>
    var lines = 1;

    function getKeyNum(e) {
        var keynum;
        // IE
        if (window.event) {
            keynum = e.keyCode;
            // Netscape/Firefox/Opera
        } else if (e.which) {
            keynum = e.which;
        }

        return keynum;
    }

    var limitLines = function (e) {
        var keynum = getKeyNum(e);

        if (keynum === 13) {
            if (lines >= this.rows) {
                e.stopPropagation();
                e.preventDefault();
            } else {
                lines++;
            }
        }
    };

    var setNumberOfLines = function (e) {
        lines = getNumberOfLines(this.value);
    };

    var limitPaste = function (e) {
        var clipboardData, pastedData;

        // Stop data actually being pasted into div
        e.stopPropagation();
        e.preventDefault();

        // Get pasted data via clipboard API
        clipboardData = e.clipboardData || window.clipboardData;
        pastedData = clipboardData.getData('Text');

        var pastedLines = getNumberOfLines(pastedData);

        // Do whatever with pasteddata
        if (pastedLines <= this.rows) {
            lines = pastedLines;
            this.value = pastedData;
        }
        else if (pastedLines > this.rows) {
            // alert("Too many lines pasted ");
            this.value = pastedData
                .split(/\r\n|\r|\n/)
                .slice(0, this.rows)
                .join("\n ");
        }
    };

    function getNumberOfLines(str) {
        if (str) {
            return str.split(/\r\n|\r|\n/).length;
        }

        return 1;
    }

    var limitedElements = document.getElementsByClassName('limit-me');

    Array.from(limitedElements).forEach(function (element) {
        element.addEventListener('keydown', limitLines);
        element.addEventListener('keyup', setNumberOfLines);
        element.addEventListener('cut', setNumberOfLines);
        element.addEventListener('paste', limitPaste);
    });
</script>
</body>
</html>


 类似资料:
  • 问题内容: 我知道保存文本区域时,可以使用nl2br()或str_replace来将/ n更改为br标签等。但是,我不确定如何在文本区域中插入换行符。我似乎找不到很多关于将那些带有换行符的数据放回文本区域的信息。 例如,我有一个表单,用户可以在其中更新字段。因此,用户可以输入: 将其保存到数据库后,将另存为: 现在,当用户在页面刷新后返回该表单时,通过从数据库中获取数据,所有字段将自动使用其先前的

  • 我加载纹理并将它们转换为精灵。下图显示了典型的子画面。形状因子画面而异。当用户只触摸表面积时,我不会移动这些精灵。目前,我正在使用矩形边界来检测用户是否触摸了它。此方法不干净,因为纹理不是矩形。因此,用户可以拖动它而无需精确触摸它。问题是如何创建触摸区域来表示纹理区域(即非透明像素区域或排除下图中的灰色区域)。

  • 问题内容: 我想计算一个文本区域中的行数,例如: 应该最多计数4行。基本上按一次Enter键即可将您转到下一行 以下代码无法正常工作: 无论有多少行,它始终为“ 1”。 问题答案: 我已经将line和lineCount方法实现为String原型: 显然,在IE9中split方法不会在字符串的末尾(或textarea的innerText属性)计算回车符和/或换行符,但在Chrome 22中会对其进行

  • 我希望能够在textarea(HTML)中编写多行文本,并用python检索该文本,以便使用Flask进行处理。或者,我想能够写一个多行文字的形式。我不知道如何使用JS,所以这对我没有帮助。我该怎么做呢?

  • 问题内容: This is my statement one.\n This is my statement2 我尝试了两者,但是渲染html文件时新行没有反映出来。我怎样才能做到这一点? 问题答案: 试试这个: 换行符和回车符是HTML实体Wikipedia。这样,您实际上是在分析新行(“\ n”),而不是将其显示为文本。

  • 如何将用户键入的文本拼写检查到TextArea? 这个JavaFX组件可以做到这一点吗? 我可以使用标准拼写检查从JavaJavaFX?