2017-01-30 47 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/和使用鏈接功能與現場參加:例如:$(元素).numberMask({beforePoint:2}); –

回答

1

所以基本上你想達到什麼是檢查如果輸入僅包含數字。至少這是我從你的解釋和示例代碼中可以理解的。

首先,您使用的是parser,這是用於消毒,並把從DOM到模型傳遞的值。之後進行驗證。如果你只是想檢查,如果只有數字被寫入,那麼你需要的東西是這樣的:

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

我建議您閱讀API文檔,因爲他們非常徹底的解釋所有ngModelController功能:click here for thorough docs

其次,你是每次調用解析器時綁定到事件。每次更改輸入元素的內容時都會調用解析器。如果您鍵入單詞每次到你的投入,你最終九次結合的盛會!除了在你改變某件事情後綁定事件太遲,因爲你的第一個事件已經被解僱了。

+0

也許他需要禁用的其他字符不是數字的入口......我用一個jQuery插件(),我使用的鏈接有角的加盟。 –