1

很长一段时间以来,我一直在尝试使用 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;
                    });
                }
            };
        });

对不起我的英语不好。
我按照自己的指示开始写作(要宽容!!)

4

1 回答 1

0

一旦你遇到了一个禁止的关键字,你就需要跳出你的循环。

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

我已经更新了你的小提琴,所以它现在可以工作了: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
     }
于 2013-10-22T20:03:33.873 回答