2017-10-04 16 views
0

javascriptアプリケーションに2桁の10進数のマスクを設定しようとしています。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> 

しかし、私は、例えば0.99を挿入することはできませんので、私は、私が欲しいものを達成するために失敗しています:私は、私は私が持っているすべてのマスク間でのUI-マスクを使用しておりますので、現時点では、以下のソリューションを使用してみました値として、000000.99を挿入する必要があります。

は、私もこのsolutionをチェックしますが、numericまたはinputmaskどちらも私の入力に何もしなかった、私はちょうど私が望んでいたものは何でも書くことができました。

答えて

0

ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/"を使用すると、小数点以下2桁までの数字とドット区切り文字を使用できます。

あなたがより多くの何かをしたい場合は、のようなディレクティブを使用します。

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

あなたはちょうど2つの小数をしたい場合、あなたはどちらかのはず:その後のは言わせて、入力要素にそれを使用

.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); 
      }); 
     } 
    } 
}) 

数フィルターをハードコーディングまたはディレクティブのパラメータとしてそれを受け取る:

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

は、私はすでにその解決策を試してみましたが、それはあちこちに私を停止することはありません私が欲しいものを書いたら、それはパターンに従わないことを正当化するでしょう、そうですか? –

+0

@RuiQueirósはい。私は編集し、ペースト値をコピーしたり、マスクして所望の結果を得るのに役立つ指令を追加しました。それがあなたを助けることを願っています – Cosmin

+0

@RuiQueirósまた、あなたは、純粋なJavaScriptではなくAngularJSソリューションを探しているというタイトルを述べるべきです。 – Cosmin

関連する問題