2014-08-29 1 views
0

저는 벽면에 머리를 대고있어 텍스트 영역에서 문자 카운트 다운을 얻는 가장 좋은 방법을 찾아 냈습니다. 이 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> 

좀 비슷한 질문을 본 적이 있지만, 아직 나를 위해 작동 답변을 찾을 수 있습니다.

감사

헨리

+1

텍스트 영역의 값을 가져오고 바꾸기로 줄 바꿈을 제거 할 수 있습니다. – scrappedcola

답변

1

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

대신

$lengthOfText = $this.val().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

+0

내 솔루션이 창에서 작동하는지 여부는 확실하지 않습니다. 이것은 또한 작동하며, 아마도 크로스 플랫폼이기도합니다. '$ this.val(). replace (/ \ r \ n? \ n/g, '') .length' – nisargjhaveri

+0

첫 번째 창이 Windows에서 작동하는 것 같습니다. 다른 브라우저에서 문제가 발생하면 다른 정규식을 사용해보십시오. 다시 한 번 감사드립니다. – hcharge

관련 문제