使用指令进行表单验证

时间:2013-10-22 19:54:33

标签: validation angularjs

很长一段时间以来,我一直在尝试使用angularJS(带指令)在输入上创建我自己的验证,但没有什么真正起作用。 即使这个主题在堆栈上被多次处理过,我的指令也不起作用,我对AngularJS感到厌烦。

当用户在我的示例中写入特殊键时,我想要一条错误消息:“hello”,“hi”,“coucou”。

我在小提琴上尝试,但只是第三个键发送错误信息。

http://jsfiddle.net/JW43C/59/

我的指示:

.directive('validkey',function(){
            return{
                require: "ngModel",
                link: function(scope, elm, attrs, ctrl){
                    var forbiddenKeyword = ["hello", "hi", "coucou"];
                    ctrl.$parsers.unshift(function(viewValue){
                        console.log(viewValue);
                        for(var i=0;i<forbiddenKeyword.length;i++){ 
                          //  console.log(forbiddenKeyword[i]);
                        if(viewValue == forbiddenKeyword[i]){
                        ctrl.$setValidity('validkey',false);
                        console.log("error!!!!!");
                        }
                        else{                                                                                 
                        ctrl.$setValidity('validkey',true);
                        }
                      }
                     return viewValue;
                    });
                }
            };
        });

对不起我的英语。
我开始用自己的指令写作(宽容!!)

1 个答案:

答案 0 :(得分:0)

一旦你点击了forbiddenKeyword,你需要突破你的循环。

例如,如果我们输入“hi”,则代码会在您对“hi”进行测试的循环中将validkey设置为false。但是在下一个循环中(当您检查coucou时),您将把密钥重置为true。我们想要添加一个break,这样一旦你点击了forbiddenKeyword,你就会跳出循环并停止测试其他值。

我已经更新了你的小提琴,所以它现在有效:http://jsfiddle.net/AbKPq/

唯一的变化是添加了休息,所以你在while循环中从这个测试开始:

    if(viewValue == forbiddenKeyword[i]){
         ctrl.$setValidity('validkey',false);
         console.log("error!!!!!");
    }

     if(viewValue == forbiddenKeyword[i]){
          ctrl.$setValidity('validkey',false);
          console.log("error!!!!!");
          break;  //quit out of the while loop
     }