angularjs text area character counter

后端 未结 4 1966
无人及你
无人及你 2020-12-03 00:51

Hi I have a characeter counter for a text area. My problem is that it doesn\'t count spaces or linebreaks. How do I make it so that it does so?

   
相关标签:
4条回答
  • 2020-12-03 01:13

    you can use a function with call ng-change=""

           <div class="controls">
    
       <textarea rows="4" cols="50"  maxlength="1500" 
            data-ng-minLength="1" data-ng  
            model="createprofilefields.description" 
            ng-change="countLength(createprofilefields.description.length)"
            required highlight-on-error>
       </textarea>
    
            <br />
    
        <!--counter-->
          <span class="form-help">{{1500-chrLength}}         
           Characters</span>
    
            </div>
    

    and in controller.js

    $scope.countLength = function(val){
      $scope.chrLength = val;
    }
    
    0 讨论(0)
  • 2020-12-03 01:18

    With Angular, textarea has an optional argument called ngTrim. According to the Angular textarea page:

    If set to false Angular will not automatically trim the input. (default: true)

    Usage:

    <textarea
      ng-model="string"
      [ng-trim="boolean"]>
    ...
    </textarea>
    

    The following code shows how to use ngTrim in order to prevent Angular to trim the input:

    <!DOCTYPE html>
    <html lang="en" ng-app="">
    
    <head>
        <meta charset="UTF-8">
        <title>Character count</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
    </head>
    
    <body>
        <textarea ng-trim="false" ng-model="countmodel"></textarea>
        <p>{{15 - countmodel.length}} left</p>
    </body>
    
    </html>
    

    Note that input[text] has the same optional ngTrim argument (Angular input page).

    0 讨论(0)
  • 2020-12-03 01:22

    Create a directive named charCount

    .directive('charCount', ['$log', '$timeout', function($log, $timeout){
        return {
            restrict: 'A',
            compile: function compile()
            {
                return {
                    post: function postLink(scope, iElement, iAttrs)
                    {
                        iElement.bind('keydown', function()
                        {
                            scope.$apply(function()
                            {
                                scope.numberOfCharacters = iElement.val().length;
                            });
                        });
                        iElement.bind('paste', function()
                        {
                            $timeout(function ()
                            {
                                scope.$apply(function()
                                {
                                    scope.numberOfCharacters = iElement.val().length;
                                });
                            }, 200);
                        });
                    }
                }
            }
        }
    }])
    

    In your HTML call the directive char-count and access variable numberOfCharacters

    <textarea
            ng-model="text"
            ng-required="true"
            char-count></textarea>
    Number of Characters: {{ numberOfCharacters }}<br>
    
    0 讨论(0)
  • 2020-12-03 01:29

    It's because angularJS automatically trimmed your model.

    If you're using angularJS 1.1.1 or newer, add ng-trim="false" to textarea.

    Working example: http://jsfiddle.net/9DbYY/

    0 讨论(0)
提交回复
热议问题