1

長い間、angularJS (ディレクティブ付き) を使用して入力に対して独自の検証を作成しようとしてきましたが、実際には何も機能しません。この件はスタック上で何度も処理されていても、私のディレクティブは機能せず、AngularJS にはうんざりしています。

ユーザーが私の例で特別なキー「hello」、「hi」、「coucou」を書いたときにエラーメッセージが欲しいです。

フィドルで試してみましたが、3 番目のキーだけでエラー メッセージが送信されます。

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」と入力すると、「hi validkey」に対してテストするループでコードが false に設定されます。しかし、次のループ ( に対してチェックしている場合coucou) で、キーを true にリセットします。を追加しbreakて、obhibitionKeyword にヒットするとループから抜け出し、他の値のテストを停止するようにします。

あなたのフィドルを更新したので、今は動作します: 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 に答える