2017-01-30 5 views
0

にelement.bind使用:私はカスタムディレクティブで入力を検証しようとして検証ディレクティブ

.directive('customValidation', function() { 
     return { 
      require: 'ngModel', 
      link: function (scope, element, attr, ngModelCtrl) { 
       function fromUser(text) { 
        element.bind("keydown keypress", function (event) { 
         if (!(event.keyCode >= 48 && event.keyCode <= 57)) { 
          return undefined; 
         } 
        }) 
       } 
       ngModelCtrl.$parsers.push(fromUser); 
      } 
     }; 
    }); 

が、それは動作しません。どんな文字もパスの検証です。私は何が間違っていますか?

+1

プラグインhttps://plugins.jquery.com/numberMask/を試して、リンク関数を使用してフィールドに参加してください:Ex:$(element).numberMask({beforePoint:2}); –

答えて

1

基本的には、入力に数字だけが含まれているかどうかを確認することです。少なくとも、あなたの説明とサンプルコードから理解できるものがあります。

最初にparserを使用しています。これは、DOMから渡された値をサニタイズしてモデルに変換するために使用されます。その後、検証が行われます。 click here for thorough docs

第二に、あなたは以下のとおりです。彼らは非常によく、すべてのngModelController機能を説明すると、私はAPIドキュメントを読んで示唆

ngModel.$validators.validCharacters = function(modelValue, viewValue) { 
    var value = modelValue || viewValue; 
    return /[0-9]+/.test(value); 
}; 

:あなただけの数字だけが書かれ​​ているかどうかを確認したい場合は、このようなものが必要パーサが呼び出されるたびにイベントにバインドします。パーサは、入力要素の内容を変更するたびに呼び出されます。 という文字を入力すると、の9時というイベントがバインドされます。あなたが何かを変更した後のイベントへのバインディングが、あなたの最初のイベントが既に解雇されたので、遅すぎるという事実を別にしてください。

+0

おそらく、彼は数字以外の文字の入力を無効にする必要があります...私はそのためにjqueryプラグインを使用しましたが、私は角度で結合するためにリンクを使用しました。 –

関連する問題