2014-08-29 85 views
0

我一直在撞牆,試圖找出從textarea獲得字符倒計時的最佳方法。我創建了這個jsfiddle,但是如果我粘貼來自lipsum.com的4000個字符,那麼它表示它有12個字符。我知道這是因爲換行符,但我不確定如何使它正常工作,並且貫穿整個瀏覽器。讓textarea正確計算換行符

$('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> 

我已經看到了一些類似的問題,但還沒有找到適合我的答案。

感謝

亨利

+1

您可以獲取textarea的值並使用替換刪除換行符。 – scrappedcola 2014-08-29 15:08:01

回答

1

嘗試取而代之的

$lengthOfText = $this.val().length 

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

這樣,你會在文本區域擺脫的新行字符。

如果希望所有類型的間隔從總數避免的,你可以使用

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

希望這有助於。

+0

這看起來已經完成了,非常感謝。我知道這將是一個正則表達式,但試圖從這裏「\ r \ n?| \ n」http://stackoverflow.com/questions/3219014/what-is-a-cross-platform-regex-for-刪除行間斷 – hcharge 2014-08-29 15:25:15

+0

我不確定我的解決方案是否適用於Windows。這也可以,也可能是跨平臺的。 '$ this.val()。replace(/ \ r \ n?| \ n/g,'').length' – nisargjhaveri 2014-08-29 15:31:24

+0

您的第一個似乎在Windows中工作,如果我在其他瀏覽器中發現任何問題,我會試試你的其他正則表達式,再次感謝。 – hcharge 2014-08-29 15:40:44