gpt4 book ai didi

javascript - Angular 自定义验证指令 - 如何正确跳过 ng-disabled 字段?

转载 作者:行者123 更新时间:2023-11-28 15:47:35 25 4
gpt4 key购买 nike

我给自己做了一个自定义指令,它工作得很好,但现在我得到了一个表单,其中有一些带有 ng-disabled 的禁用字段,我相信我必须调用 setTimeout 函数,因为 ng-disabled 可能会在事后发生,但我不确定我是否正确编码了......我的代码是正确的方式吗?我不确定是否有一个特殊的位置来放置 setTimeout 代码段,我什至不确定它实际上是否正确......但它似乎确实有效......所以可以如果需要的话,有人验证和/或更新我的代码吗?

// Angular - custom Directive
directive('myDirective', function($log) {
return {
require: "ngModel",
link: function(scope, elm, attrs, ctrl) {
validate = function(value) {
.....
}

var validator = function(value) {
// invalidate field before doing validation
ctrl.$setValidity('validation', false);

elm.unbind('keyup').bind(keyup, function() {
// make the regular validation of the field value
var isValid = validate(value); // call validate method
scope.$apply(ctrl.$setValidity('validation', isValid));
});

// for the case of field that might be ng-disabled, we should skip validation
setTimeout(function() {
if(elm.attr('disabled')) {
ctrl.$setValidity('validation', true);
}
}, 0);

return value;
};

// attach the Validator object to the element
ctrl.$parsers.unshift(validator);
ctrl.$formatters.unshift(validator);
}
};
});


编辑
我必须注意,这段代码只是我代码中很小的一部分,我只提取了其中的相关部分,是的,乍一看 unbind('keyup') 并没有多大作用除非您看到真正的代码,它更像是 unbind('keyup').bind(optionEvnt)...这实际上提供了一个额外的可选功能,可以选择您要使用的事件触发器当我使用 blur 事件时,验证器和默认的 keyup 会产生干扰。在许多表单验证中,我更喜欢使用 blur 事件,因此它是一个可选功能。
真正的代码可以在我的Github / Angular-Validation上找到并且可供所有人使用...看一下,您可能会非常喜欢它并在您的代码中使用它:)

最佳答案

你似乎有很多不必要的代码,除非我错过了你的实际意图。这应该可行。

// Angular - custom Directive
directives.directive('myDirective', function($log) {
return {
require: "ngModel",
link: function(scope, elm, attrs, ctrl) {

var validate = function(value) {
return (value === "valid");
};

var validator = function(value) {
ctrl.$setValidity('validInput', validate(value));
return value;
};

// attach the Validator object to the element
ctrl.$parsers.unshift(validator);
ctrl.$formatters.unshift(validator);

// Observe the disabled attribute
attrs.$observe("disabled",function(disabled) {
if(disabled){
// Turn off validation when disabled
ctrl.$setValidity('validation', true);
} else {
// Re-Validate the input when enabled
ctrl.$setValidity('validation', validate(ctrl.$viewValue));
}
});

}
};
});

关于javascript - Angular 自定义验证指令 - 如何正确跳过 ng-disabled 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21745598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com