javascript - 没有不必要的约束限制文本区域的输入

标签 javascript jquery html css

我正在寻找一种方法来限制对文本区域的输入,使用户输入能够保持在指定区域内,而无需对最大字符数进行不必要的限制。

明显的方法是 maxlength,但这意味着 maxlength 将由全部大写输入将占用多少空间来确定,这将需要一个不必要的低 maxlength。

还有各种 JS/jQuery 解决方案可以限制在文本区域中输入的行数(例如 Limit number of lines in textarea and Display line count using jQuery ),但据我所知,这些解决方案依赖于 ENTER键,但如果您将一段文本复制粘贴到文本区域则不起作用。

澄清

<!doctype html>
<head>
    <style>
    .one{
        height: 60px;
        width: 55px;
        background-color: pink;
        font-size: 16px;
    }
    </style>    
</head>
<body>
    <div class="one">i i i i i i i i i i i i i i i i i i</div>
    <br>
    <div class="one">M M M M M M M M M</div>
</body>
</html>

div one 可以包含 18 个小写的“i”,但只能包含 9 个大写的“M”,所以为了确保输入永远不会超过 div one,maxlength 必须设置为 9。一般结果是 Div一个区域通常不会被充分利用。

以上只是一个简单的例子,可以快速说明我想要什么样的输出。该解决方案应该通过表单文本字段绑定(bind)到输入。

想法?

干杯

最佳答案

我不认为这是一个容易解决的问题。可能有人比我更专业,但我能立即想到的唯一方法是创建一个字符映射并为它们分配宽度。使用此 map ,您可以将任何新输入与 map 进行比较,并确定输入的长度/宽度。

示例伪代码,这可能无法正常工作;

   // YOUR CHAR MAP WITH WIDTHS ASSIGNED TO LETTERS
    var charMap = {
      i: 1,
      M: 2
    }

   // MAX AMOUNT OF CHARACTERS
   var charLimit = 18;

   // ASSUME THE TEXTAREA IS EMPTY, COULD GET ACTUAL WIDTH HERE INSTEAD
   var currentChars = 0;

   $('textarea').on('change', function{
     // GET ALL NEW INPUT
     var chars = $(this).val();
     // FOR LIMITING THE INPUT, THIS IS THE FINAL STRING THAT WILL END UP IN THE TEXTBOX
     var limitedUserInput = '';

     // CHECK EACH CHAR ONE BY ONE, COMPARING ITS WIDTH USING THE MAP
     for(var x = 0; x < chars.length; x++){
       currentChars += chars[x];
       // IF SIZE LIMIT NOT HIT, ADD CHARACTER TO OUTPUT STRING
       if(currentChars < charLimit){
         limitedUserInput += chars[x];
       }
     }

     // DISPLAY THE OUTPUT IN THE TEXT AREA (TRIMMING ANY EXTRA CONTENT)
     $(this).html = limitedUserInput;
   })

这将使您拥有 18 x charMap.i (18) 或 9 x charMap.M (18)。

我希望这能说得通。

关于javascript - 没有不必要的约束限制文本区域的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891841/

相关文章:

javascript - 了解基本的模块化模式私有(private)和公共(public)功能

javascript - 如何为我的应用程序创建用户首次屏幕指南

javascript - 如何在普通 Jekyll 页面上使用 Podlove 客户端?

无法导出 Javascript 函数

jquery - 如何使用正则表达式验证整数和小数值?

jquery - 在jquery中获取特定的相邻元素

HTML/CSS 导航栏格式问题

html - WebSphere 中未选取 CSS 样式属性

javascript - ajax 响应超过范围的最大值

javascript - NaN 错误 - 处理字符串和整数