簡體   English   中英

關閉電子郵件驗證

[英]Turn off email validation

我有以下的html / angular

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

現在的問題是,Angular有一個自動驗證器,用於電子郵件,除非正確通過,否則不會設置myEmailVar。 因此,例如,如果我輸入“名稱”,則不會設置myEmailVar。 您可以在這里看到它: http : //jsfiddle.net/bFVsW/ (輸入單詞test,然后輸入test@test.test)

現在,我想運行自己的驗證,但也支持移動設備。 如果我使用type =“ email”,則某些移動瀏覽器會切換鍵盤布局以簡化地址輸入(例如@符號)。 所以我不能將其切換為type =“ text”。 我想做的是覆蓋有角度的電子郵件驗證程序,或者完全關閉它,因為我將處理自己的驗證。 那可能嗎?

在HTML5上,您可以使用表單的屬性novalidate禁用瀏覽器的驗證:

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

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

對於仍在尋找答案的任何機構,我在此堆棧溢出答案中找到了答案: 如何禁用angulars type = email驗證?

本質上,您可以添加自己的自定義指令,以禁用默認的角度驗證器。

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];
        }
    }
});

同一線程中的另一個答案給出了更詳細的答案: 如何禁用angulars type = email驗證?

編輯:此解決方案過去對我有用,但是當我從angular 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};
        }
    }
});

更新:這是行不通的……至少不能以您想要的方式。 將ng-non-bindable添加到表單或任何輸入會中斷所有綁定。 因此,輸入中的ng-model將不再起作用。 對不起...

ng-non-bindable是此問題的答案。 在這里查看我的答案:

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

簡單的解決方案:初始化類型為'text'字段,並通過超時將類型更改為'email' 在這種情況下,angularjs將不會添加電子郵件驗證程序,而您將擁有電子郵件鍵盤。

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

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

http://jsfiddle.net/44pc5j8L/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM