【问题标题】:Restrict the user to paste max (40 ) Characters in textarea限制用户在 textarea 中粘贴最大 (40) 个字符
【发布时间】:2012-07-28 04:26:21
【问题描述】:

我限制用户在文本区域中输入字符的最大限制(40Char)。 我在onKeyUp 事件的textarea 上调用下面的JS 函数。

但是当我复制粘贴超过 40 个字符的内容时,直到我在 textarea 上执行 keyup/down 时才会弹出弹出窗口(警报)。

function checkLength(textBox, e, maxLength) {
  if (textBox.value.length > maxLength - 1) {        
     alert("* You have reached max limit ");
     textBox.value = textBox.value.substr(0, maxLength);
  }
  else {
     alert(maxLength - textBox.value.length + " characters remaining");
  }
}

在粘贴到textarea 后,有没有办法在没有keyup/down 的情况下获得警报?

【问题讨论】:

  • 如果粘贴的文本超过 40 个字符,会发生什么情况?
  • 您是否使用 JavaScript 库来绑定事件处理程序?
  • @sime 应该会提醒("超过 40 个字符输入请修改");
  • 我可以写一个解决方案,但我需要知道如何在 JavaScript 中绑定事件处理程序。你使用图书馆吗?

标签: javascript asp.net html asp.net-mvc


【解决方案1】:

假设我们有一个asp Textbox,那么我们可以使用如下所示的“OnPaste”事件

   <asp:TextBox TextMode="MultiLine" runat="server" ID="txtComment_c" 
    onpaste="return maxLengthPaste(this, 40)" MaxLength="40"></asp:TextBox>

在粘贴内容之前,我们首先需要检查已经占用了多少长度,然后 window.clipboard.getdata.length 会给我们将要粘贴的数据的长度。考虑下面的代码

   function maxLengthPaste(field, maxChars) {

        if ((field.value.length + window.clipboardData.getData("Text").length) > maxChars) {
            alert("Cannot have more than " + maxChars + " Characters");
            return false;
        }

    }

【讨论】:

    【解决方案2】:

    得到解决方案的家伙:)

    onKeyUp = "checkLength(this);">
    </form>
    <script>
    function fncKeyLength(textBox){
    if (window.event.ctrlKey){
    if (window.event.keyCode == 86)//Paste 
    if (textBox.value.length > maxLength - 1)
    {            
      alert("* You have reached max limit ");
      textBox.value = textBox.value.substr(0, maxLength); 
    }
    </script>
    

    【讨论】:

      【解决方案3】:

      如果您想即时修剪多余的字符,另一种可能的方法如下。

      • 创建一个修剪函数,修剪超过 40 个字符。例如 - trimText()
      • onFocus - 添加一个 setInterval 函数以在每 500 毫秒后调用 trimText()
      • onBlur - 清除 setInterval 函数并再次运行 trimText()
      • onChange - 再次运行trimText()。如果需要,这将是一项额外的检查。

      根据您的要求,您可以更新持续时间。

      示例:http://jsfiddle.net/codebombs/AyLdW/

      如果您只想显示一条警报消息,请使用onchange

      演示:http://jsfiddle.net/codebombs/3Jdvg/1/

      【讨论】:

      • 我想在用户粘贴超过 40 个字符时收到警报。但是使用我的代码,当用户粘贴 40 个字符时,我不会收到警报。一旦用户点击 textarea 我就会得到警报..
      【解决方案4】:

      类似:

      $('#textbox1').on('change', function() {
          var currentText = $(this).val();
          if(currentText.length > 40)
              $(this).val(substr(currentText,0,40));
      });
      

      甚至还有一个 Ellipsis 插件可以为您添加省略号 (...)。

      【讨论】:

        【解决方案5】:

        您可能应该为此使用 onChange 事件

        【讨论】:

          猜你喜欢
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-30
          • 1970-01-01
          • 2013-10-11
          • 1970-01-01
          相关资源
          最近更新 更多