要跨越的字符数的多重计数?

发布于 2025-01-14 07:22:55 字数 945 浏览 1 评论 0原文

我尝试向表单添加两个单独的最大字符字段失败。我尝试重命名元素 id 并更改 var i 和 c 但无济于事。谢谢

小提琴 http://jsfiddle.net/rLkcy0t4/

这是代码。

var maxchar = 160;
var i = document.getElementById("textinput");
var c = document.getElementById("count");
c.innerHTML = maxchar;

i.addEventListener("keydown", count);

function count(e) {
  var len = i.value.length;
  if (len >= maxchar) {
    e.preventDefault();
  } else {
    c.innerHTML = maxchar - len - 1;
  }
}
textarea {
  display: block;
  width: 200 px;
  height: 100 px;
}
Remaining characters: <span id="count"></span>
<textarea id="textinput">
    </textarea>

I have been unsuccessful in trying to add two seperate maximum character fields to a form. I have tried renaming the element ids and changing the var i and c but to no avail. Thanks

Fiddle http://jsfiddle.net/rLkcy0t4/

Here is the code.

var maxchar = 160;
var i = document.getElementById("textinput");
var c = document.getElementById("count");
c.innerHTML = maxchar;

i.addEventListener("keydown", count);

function count(e) {
  var len = i.value.length;
  if (len >= maxchar) {
    e.preventDefault();
  } else {
    c.innerHTML = maxchar - len - 1;
  }
}
textarea {
  display: block;
  width: 200 px;
  height: 100 px;
}
Remaining characters: <span id="count"></span>
<textarea id="textinput">
    </textarea>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

叶落知秋 2025-01-21 07:22:55

委派和数据属性将有所帮助

window.addEventListener("load", function() {
  const container = document.getElementById("container")
  container.querySelectorAll("textarea").forEach(ta => ta.dataset.max = ta.dataset.cnt); // save 
  container.addEventListener("input", function(e) {
    const tgt = e.target;
    if (tgt.matches("textarea")) {
      const maxchar = +tgt.dataset.max;
      let cnt = +tgt.dataset.cnt;
      const c = tgt.previousElementSibling;
      cnt = maxchar - tgt.value.length;
      if (cnt < 0) {
        tgt.value = tgt.value.slice(0, maxchar);
        cnt = 0;
      }
      tgt.dataset.cnt = cnt;
      c.textContent = cnt;
    }
  })
})
textarea {
  display: block;
  width: 200 px;
  height: 100 px;
}
<div id="container">
  Remaining characters: <span class="count"></span><textarea id="textinput1" data-cnt="160"></textarea>
  <hr/> Remaining characters: <span class="count"></span><textarea id="textinput2" data-cnt="100"></textarea>
</div>

Delegation and data attributes will help

window.addEventListener("load", function() {
  const container = document.getElementById("container")
  container.querySelectorAll("textarea").forEach(ta => ta.dataset.max = ta.dataset.cnt); // save 
  container.addEventListener("input", function(e) {
    const tgt = e.target;
    if (tgt.matches("textarea")) {
      const maxchar = +tgt.dataset.max;
      let cnt = +tgt.dataset.cnt;
      const c = tgt.previousElementSibling;
      cnt = maxchar - tgt.value.length;
      if (cnt < 0) {
        tgt.value = tgt.value.slice(0, maxchar);
        cnt = 0;
      }
      tgt.dataset.cnt = cnt;
      c.textContent = cnt;
    }
  })
})
textarea {
  display: block;
  width: 200 px;
  height: 100 px;
}
<div id="container">
  Remaining characters: <span class="count"></span><textarea id="textinput1" data-cnt="160"></textarea>
  <hr/> Remaining characters: <span class="count"></span><textarea id="textinput2" data-cnt="100"></textarea>
</div>

完美的未来在梦里 2025-01-21 07:22:55

你的小提琴中的问题是你声明了多个具有相同名称的变量。您声明 ic 两次。您还声明了函数 count 两次。将其中一半变量重命名为唯一的名称,它应该按照您期望的方式工作。

您可以在此 fiddle 中看到一个工作示例。

The problem in your fiddle is you are declaring multiple variable with the same name. You declare i and c twice. You also declare the function count twice. Rename half of those variables to something unique and it should work how you expect it to.

You can see a working example in this fiddle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文