javascript - JavaScript 中文本区域输入长度检查

标签 javascript forms validation textarea

我想创建一个 SMS 网关,每次写入(或粘贴) 160 个字符时都会提醒用户。我需要存储一个变量 n,其中包含 160 个字符的消息部分。代码是这样的,只是n需要全局存储。还有比e更好的方法吗? G。将其存储到隐藏的表单字段中? 注意:在这种特殊情况下,假设一次粘贴少于 160 个字符是安全的。

window.onload = function() {
  var n=1;   
  var t=document.getElementById('msg');
  t.addEventListener('input', function() {
    var l=t.value.length;
    if(l>n*160){
      n++;
      alert('Message will be split into '+n+' parts');   
    }
  }, false);
}

最佳答案

正如我的评论中提到的,这取决于您最终想要对 n 做什么。

如果您只想向用户显示一条消息,则可以在计算出该值后更新 DOM。

您当前的示例不允许用户在输入/粘贴文本后删除文本。更好的示例是无状态的,即不要将 n 与其自身进行比较,如下所示我的例子如下:

var t = document.getElementById('msg');
var splitSize = 10;
var n = 1;
t.addEventListener('input', function() {
  var nextN = 1;
  
  if (t.value.length > 0) {
    nextN = Math.ceil(t.value.length / splitSize);
  }
  
  if (n !== nextN) {
    n = nextN;
    var label = document.getElementById('label');

    if (n === 1) {
      label.innerHTML = '';
    } else {
      label.innerHTML = 'The message will be split into ' + n + ' parts';
    }
  }
});
<p id="label"></p>
<textarea id="msg"></textarea>

关于javascript - JavaScript 中文本区域输入长度检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953781/

相关文章:

javascript - 为什么 'let' 可以在 Chrome 的 devtools 控制台中重新声明? (其他浏览器不允许。)

javascript - 访问用于创建 html 页面的文件夹和文件

脚本错误;未捕获的语法错误 : missing ) after argument list

javascript - Gatsby JS - 多个页面拉入不同类别的 Markdown 文件

javascript - JS/JQuery : Dynamically add "pattern" and "title" attribute to form input

javascript - 在必填字段有效之前禁用按钮

c# - 无法将 List<T> 发布到 Controller

javascript - 如何将 AJAX 表单提交合并到 Bouncer.js 中?

php - 使用 Javascript 和 PHP 验证表单时出现问题

c# - 是否可以在 WCF 中设置数据成员的最大长度