javascript - onload 计算文本区域中的字符数

标签 javascript counter

我正在尝试创建一个简单的工具来计算标题/元描述的长度。我设法创建了字符计数器(没有 jQuery)。但是,在页面加载时,每个文本区域中都会输入一个默认文本,我希望将其包含在计数中。

此默认文本的长度可能会更改(人们将能够从 URL 导入自己的标题/元描述,因此我无法在代码中使用固定长度)。

有没有办法使用“document.onload”来计算文本区域的内容?我发现了各种讨论它的主题,但由于我是 JS 的 super 初学者,所以我还没有设法使代码适应我自己的情况:-/

如果您能提供帮助,谢谢!

Codepen 预览:https://codepen.io/pen/OzagNQ

这是 HTML 部分:

<label for="titletag">Title</label><br>
<div class="wrap">
<textarea name="text" id="titletag" cols="100" rows="1" oninput="count_title('titletag','ctitle')">Default title (variable length).</textarea><span id="ctitle" class="counter"></span></div><br><br>

<label for="metadesc">Meta description</label><br>
<div class="wrap">
<textarea name="metadesc" cols="100" rows="5" oninput="count_mdesc()" id="metadesc">Default meta description (variable length).</textarea><span id="cmdesc" class="counter"></span></div>

还有 JS 部分:

window.load = function() {
   count_title(document.getElementById('titletag'), document.getElementById('ctitle'));
 }

 function count_title() {
   var el_t = document.getElementById('titletag');
   var length = 70;
   var el_c = document.getElementById('ctitle');
   el_c.innerHTML = length;
   el_t.oninput = function() {
     document.getElementById('ctitle').innerHTML = (length - this.value.length);
   };
 }

 function count_mdesc() {
   var el_t = document.getElementById('metadesc');
   var length = 320;
   var el_c = document.getElementById('cmdesc');
   el_c.innerHTML = length;
   el_t.oninput = function() {
     document.getElementById('cmdesc').innerHTML = (length - this.value.length);
   };
 }

 function pageRefresh() {
   count_title();
   count_mdesc();
 }

 window.onload = function() {
   pageRefresh();
 }

最佳答案

您可以使用 el_t.value.length 获取 oninput 函数之外每个元素的长度:

function count_title() {
  var el_t = document.getElementById("titletag");
  var maxLength = 70;
  var el_c = document.getElementById("ctitle");
  el_c.innerHTML = maxLength - el_t.value.length;
  el_t.oninput = function() {
    document.getElementById("ctitle").innerHTML = maxLength - this.value.length;
  };
}
function count_mdesc() {
  var el_t = document.getElementById("metadesc");
  var maxLength = 320;
  var el_c = document.getElementById("cmdesc");
  el_c.innerHTML = maxLength - el_t.value.length;
  el_t.oninput = function() {
    document.getElementById("cmdesc").innerHTML = maxLength - this.value.length;
  };
}
function pageRefresh() {
  count_title();
  count_mdesc();
}

window.onload = function() {
  pageRefresh();
};

https://codepen.io/anon/pen/KZreOx

您可能还需要考虑将这两个函数重构为单个函数,以使您的代码更易于维护:

function count_element(tag, ctag, maxLength) {
  var el_t = document.getElementById(tag);
  var el_c = document.getElementById(ctag);
  el_c.innerHTML = maxLength - el_t.value.length;
  el_t.oninput = function() {
    document.getElementById(ctag).innerHTML = maxLength - this.value.length;
  };
}

function pageRefresh() {
  count_element("titletag", "ctitle", 70);
  count_element("metadesc", "cmdesc", 320);
}

window.onload = function() {
  pageRefresh();
};

https://codepen.io/anon/pen/dJQqjg

关于javascript - onload 计算文本区域中的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322427/

相关文章:

javascript - 获取选择选项值更改的行的列的值

javascript - 在 TextArea 中上下滚动

javascript - NPAPI 插件,从网页中删除Child 会导致 Firefox4 和 Chrome 崩溃

java - JTextPane 和正则表达式的问题

caching - MongoDB 缓存计数器

javascript - Canvas 2D fillStyle 有时不更新颜色

javascript - Edge中XML解析后如何保持属性的顺序?

python-3.x - python 3.4 计算 .txt 文件中的出现次数

python - 为什么Python的时间函数(如perf_counter_ns)解析会不一致?

excel - 如何使用 Excel 宏 VBA 在 Excel 工作表中查找行?