关闭电子邮件验证

时间:2013-04-12 13:12:35

标签: angularjs

我有以下的html / angular

<input type="email" data-ng-model="myEmailVar" />
{{ myEmailVar }}

现在问题是angular有一个电子邮件的自动验证程序,除非它正确传递,否则不会设置myEmailVar。因此,例如,如果我输入“name”,则不会设置myEmailVar。你可以在这里看到它:http://jsfiddle.net/bFVsW/(输入单词test,然后输入test@test.test)

现在,我想运行自己的验证,但也支持移动版。如果我使用type =“email”,一些移动浏览器会切换键盘布局,以便更容易输入地址(例如@符号)。所以我无法将其切换为type =“text”。我想要做的是覆盖有角度的电子邮件验证器,或者完全关闭它,因为我将处理我自己的验证。这可能吗?

4 个答案:

答案 0 :(得分:3)

在HTML5上,您可以使用表单的属性novalidate来禁用浏览器的验证:

<form novalidate>
    <input type="email"/>
</form>

或者您可以使用type="text"

答案 1 :(得分:1)

对于仍在寻找答案的任何机构,我发现此堆栈中的答案溢出答案: How to disable angulars type=email validation?

基本上,您可以添加自己的自定义指令来禁用默认的角度验证器。

angular.module('app').directive('disableValidators', function() {
    return {
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl){
            var validator = function(value){
                return value;
            };

            // replace other validators with our own
            ctrl.$parsers = [validator];
            ctrl.$formatters = [validator];
        }
    }
});

同一主题中的另一个答案提供了更详细的答案: How to disable angulars type=email validation?

编辑:此解决方案过去对我有用,但当我从1.2.X角升级到1.3.X时不再有效。但是,它有一些小的调整:

angular.module('app').directive('disableValidators', function() {
    return {
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
            var validator = function(value) {
                return value;
            };

            // replace the email validators
            ctrl.$validators = {email: validator};
        }
    }
});

答案 2 :(得分:0)

更新:这不起作用......至少不是你喜欢的方式。将ng-non-bindable添加到表单或任何输入会中断ALL绑定。因此,输入中的ng模型将不再起作用。对不起....

ng-non-bindable是这个问题的答案。请在此处查看我的回答:

https://stackoverflow.com/a/19387233/75644

答案 3 :(得分:-3)

简单解决方案:类型为'text'的init字段,并通过超时将类型更改为'email'。在这种情况下,angularjs不会添加电子邮件验证器,您将拥有电子邮件键盘。

<input type="{{type}}" />

$scope.type = 'text';  
$timeout(function() { 
    $scope.type = 'email'; 
});

http://jsfiddle.net/44pc5j8L/