【发布时间】: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();返回假; },像这样?
标签: javascript jquery angularjs angularjs-directive