2017-10-04 5 views
0

Ich versuche, eine Dezimal-Maske mit zwei Ziffern zu meiner Javascript-Anwendung zu setzen. Ich hat versucht, die folgende Lösung zu verwenden, da ich über alle Masken ui-Maske verwenden, die ich im Moment habe:Wie setze ich die Dezimal-Maske in Javascript

<input id="DebitValue" type="text" placeholder="{{appResources.ContractCreateEditPaymentValuePlaceholder}}" ng-model="DebitValue" ui-mask-placeholder ui-mask="?9?9??9?9?9?9?.?9?9?" model-view-value="true" name="DebitValue" required> 

Aber ich versagen zu erreichen, was ich will, da ich Instanz nicht kann 0.99 einfügen Als Wert müsste ich 000000.99 einfügen.

ich diesen solution auch geprüft, aber weder die numeric oder inputmask tat nichts, um meinen Input, konnte ich nur schreiben, was ich wollte.

Antwort

0

Sie können ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/" verwenden, um nur Zahlen mit maximal 2 Dezimalstellen und mit einem Punkttrennzeichen zu akzeptieren.

Wenn Sie etwas mehr wollen, dann eine Richtlinie wie verwenden:

.directive('currencyInput', function ($browser, $filter) { 
    return { 
     require: 'ngModel', 
     link: function ($scope, $element, $attrs, ngModel) { 
      var listener = function() { 
       var value = $element.val().replace(/,/g, ''); 
       $element.val($filter('number')(value, 0)); 
      }; 

      // This runs when we update the text field from element 
      ngModel.$parsers.push(function (viewValue) { 
       return parseInt(viewValue.replace(/,/g, ''), 10); 
      }); 

      // This runs when the model gets updated on the scope directly and keeps our view in sync 
      ngModel.$formatters.push(function (modelValue) { 
       return modelValue == null || modelValue.length === 0 ? '' : $filter('number')(modelValue, 0); 
      }); 

      ngModel.$viewChangeListeners = function() { 
       $element.val($filter('number')(ngModel.$viewValue, 0)) 
      } 

      $element.bind('change', listener); 
      $element.bind('keypress', function (event) { 
       var key = event.which; 
       // If the keys include the CTRL, SHIFT, ALT, or META keys, or the arrow keys, do nothing. 
       // This lets us support copy and paste too 
       if (key === 0 || key === 8 || (15 < key && key < 19) || (37 <= key && key <= 40)) { 
        return; 
       } 
       $browser.defer(listener); // Have to do this or changes don't get picked up properly 
      }); 
      $element.bind('paste cut', function() { 
       $browser.defer(listener); 
      }); 
     } 
    } 
}) 

es dann Elemente auf Eingabe verwenden, lassen Sie uns sagen:

<input currency-input ng-maxlength="10" ng-model="myDecimal" type="text"> 

Wenn Sie nur zwei Dezimalstellen wollen, sollten Sie entweder hardcode number filter oder empfange es als parameter zur direktive:

$element.val($filter('number')(value, 2)); 
+0

ich habe diese lösung schon ausprobiert, aber das hält mich nicht davon ab m schreibe, was ich will, es wird nur bestätigen, dass es nicht dem Muster folgt, habe ich recht? –

+0

@ RuiQueirós ja. Ich bearbeitete und fügte eine Direktive hinzu, die Ihnen hilft, Paste-Werte oder Maske zu kopieren und das gewünschte Ergebnis zu haben. Ich hoffe es hilft dir. – Cosmin

+0

@ RuiQueirós auch sollten Sie im Titel erwähnen, dass Sie eine AngularJS Lösung suchen, nicht reines Javascript. – Cosmin

Verwandte Themen