条件检查时如何一次停止执行if语句?

Posted

技术标签:

【中文标题】条件检查时如何一次停止执行if语句?【英文标题】:How to stop the execution of if statement at one time, when condtiion check? 【发布时间】:2018-05-08 01:57:50 【问题描述】:

我在 angularjs 中有用于表单验证的自定义指令,在此 if 条件工作正常,但条件执行多次,如何停止电子邮件和数字的 if 条件,仅检查一次。谁能帮我解决这个问题?

这是我的验证指令.js,

app.directive("formValidate", function() 
  return 
    require: 'ngModel',
    template: '<p>Please Fill this Field</p>',
    //scope: true,
    link: function(scope, elem, attr) 

        scope.$watch(attr['ngModel'], function(value) 

                var NameValidator = angular.element("<p class='NameError'>This field is required!</p>");
                var EmailValidator = angular.element("<p class='EmailError'>This Email is Invalid!</p>");
                var PhoneValidator = angular.element("<p class='PhoneError'>Enter Number Only</p>");

                if (attr['name'] == "name") 
                    if (((value || '').toString()).length == 0) 

                        NameValidator.insertAfter(elem);
                        return;


                     else 
                        var nameRemove = elem[0].nextSibling;
                        nameRemove.remove();

                    
                


                if (attr['name'] == 'email') 


                    if (!(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]2,4$/.test(value))) 
                        console.log('1:', value);
                        EmailValidator.insertAfter(elem);
                        return;

                     else 
                        console.log('2:', value);

                        var emailRemove = elem[0].nextSibling;
                        emailRemove.remove();

                    
                
                if (attr['name'] == 'number') 
                    if (!(/^[(]0,1[0-9]3[)]0,1[-\s\.]0,1[0-9]3[-\s\.]0,1[0-9]4$/.test(value))) 
                        PhoneValidator.insertAfter(elem);
                        return;

                     else 
                        var phoneRemove = elem[0].nextSibling;
                        phoneRemove.remove();

                    
                
            )

    

 );

【问题讨论】:

这看起来是一个 XY 问题。这里的情况是显示多个验证消息吗? 不,如果条件匹配,我想一次性添加电子邮件错误,我不想在输入每个字母时执行它 else var emailRemove = elem[0].nextSibling; emailRemove.remove();返回假; ,像这样? 【参考方案1】:

你可以使用return false;停止执行

return false;

【讨论】:

我想在哪里使用它? 你可以在else部分应用这个,如果电子邮件和号码的验证没有完成,那么在else部分你可以返回false来停止执行。 else var emailRemove = elem[0].nextSibling; emailRemove.remove();返回假; ,像这样? 是的,你可以使用或者你也可以使用下面的 return 语句来停止执行 return undefined;返回假;返回真;返回“一些字符串”;返回 12345; 请你看看我下面的答案,它工作正常,但错误元素隐藏,它不会删除【参考方案2】:

将监视函数提取到函数声明中并使用名称代替,例如scope.$watch(attr['ngModel'], namedFn).

去抖这个命名函数。您可以在UnderscoreJS 中使用去抖动功能。这将确保在观察到的更改停止到达后调用命名函数。

scope.$watch(attr['ngModel'], _.debounce(namedFn, 300));

【讨论】:

【参考方案3】:

它工作正常,但元素没有删除,它只是隐藏,

      app.directive("formValidate", function() 
return 
    require: 'ngModel',
    template: '<p>Please Fill this Field</p>',
    //scope: true,
    link: function(scope, elem, attr) 

        scope.$watch(attr['ngModel'], function(value) 

                var NameValidator = angular.element("<p class='NameError'>This field is required!</p>");
                var EmailValidator = angular.element("<p class='EmailError'>This Email is Invalid!</p>");
                var PhoneValidator = angular.element("<p class='PhoneError'>Enter Number Only</p>");

                if (attr['name'] == "name") 
                    if (((value || '').toString()).length == 0) 

                        NameValidator.insertAfter(elem);
                        return;


                     else 
                        var nameRemove = elem[0].nextSibling;
                        nameRemove.remove();

                    
                


                if (attr['name'] == 'email') 

                    if (!(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]2,4$/.test(value))) 
                        if (!scope.emailRemove) 
                            EmailValidator.insertAfter(elem);
                            scope.emailRemove = elem[0].nextSibling;
                        
                     else 
                        scope.emailRemove.remove();
                    
                
                if (attr['name'] == 'number') 
                    if (!(/^[(]0,1[0-9]3[)]0,1[-\s\.]0,1[0-9]3[-\s\.]0,1[0-9]4$/.test(value))) 
                        if (!scope.phoneRemove) 
                            PhoneValidator.insertAfter(elem);
                            scope.phoneRemove = elem[0].nextSibling;
                        

                     else 

                        scope.phoneRemove.remove();

                    
                
            )
            // var select = angular.element("<p>Name is Required</p>");
            // elem.append(select);
            // if (attr.name === "name")   
            //     elem.bind('blur', function() 
            //         scope.$apply(function() 
            //             elem.replaceWith(select);
            //         )
            //     )
            // 
    

);

【讨论】:

以上是关于条件检查时如何一次停止执行if语句?的主要内容,如果未能解决你的问题,请参考以下文章

针对IF语句测试范围值数组的最佳方法

C语言中,很多if语句并列时系统将如何执行?

2判断语句

hell脚本编写 之 条件选择,条件判断,循环语句

Linux | shell脚本-条件判断if和循环语句for

while语句(内有实操)