【问题标题】:Getting textarea to count line breaks properly让 textarea 正确计算换行符
【发布时间】:2014-08-29 15:03:17
【问题描述】:

我一直在用头撞墙,试图找出从 textarea 中获取字符倒计时的最佳方法。我已经创建了这个jsfiddle,但如果我从lipsum.com 粘贴4000 个字符,那么它说它超过了12 个字符。我知道这是因为换行符,但我不确定如何让它正常工作,并且在浏览器中保持一致。

$('textarea').on('keyup', function() {
 characterCount(this);
});

$('textarea:not(:empty)').each(function() {
 characterCount(this);
});

function characterCount(that) {
var $this         = $(that),
    $maxLength    = $this.attr('data-val-length-max'),
    $lengthOfText = $this.val().length,
    $charCountEl  = $this.closest('.form-group').find('.maxchar-count');

if($maxLength) {
  $($charCountEl).text($maxLength - $lengthOfText);
}

if($lengthOfText > $maxLength) {
  $charCountEl.addClass('has-error');
} else {
  $charCountEl.removeClass('has-error');
}
}

还有标记

<div class="form-group">
<textarea rows="5" data-val-length-max="4000"></textarea>
<div>
    <span class="maxchar-count">4000</span>
</div>
</div>

我见过一些类似的问题,但还没有找到适合我的答案。

谢谢

亨利

【问题讨论】:

  • 您可以获取文本区域的值并使用替换删除换行符。

标签: javascript jquery html


【解决方案1】:

试试

$lengthOfText = $this.val().replace(/\n/g, '').length

而不是

$lengthOfText = $this.val().length

这样你就可以去掉 textarea 中的换行符了。

如果你想从总数中避免各种间距,你可以使用

$lengthOfText = $this.val().replace(/\s/g, '').length

希望这会有所帮助。

【讨论】:

  • 看来成功了,非常感谢。我知道这将是一个正则表达式,但正在尝试这个 "\r\n?|\n" 从这里 stackoverflow.com/questions/3219014/…
  • 我不确定我的解决方案是否适用于 Windows。这也有效,也许也是跨平台的。 $this.val().replace(/\r\n?|\n/g, '').length
  • 您的第一个似乎可以在 Windows 中运行,如果我在其他浏览器中发现任何问题,我会尝试您的其他正则表达式,再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2014-07-27
  • 2016-10-29
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多