我試圖驗證自定義輸入框,下面AngularJS輸入與數字得到了一個未定義當超出範圍
<div class="form-group">
<label for="inputNetwork" class="control-label">{{'DNS_PRIMARY' | translate}}</label>
<div class="control-content">
<p>
<input type="number" integer min="1" max="223"
class="ip-single-column" ng-model="network.dnsPrimary[0]" name="dnsP0" required ng-blur="dnsBlur('P', 0)"
ng-class="{'has-error': networkForm.dnsP0.$invalid}" validate-dns>.
<input type="number" integer min="0" max="255"
class="ip-single-column" ng-model="network.dnsPrimary[1]" name="dnsP1" required ng-blur="dnsBlur('P', 1)"
ng-class="{'has-error': networkForm.dnsP1.$invalid}" validate-dns>.
<input type="number" integer min="0" max="255"
class="ip-single-column" ng-model="network.dnsPrimary[2]" name="dnsP2" required ng-blur="dnsBlur('P', 2)"
ng-class="{'has-error': networkForm.dnsP2.$invalid}" validate-dns>.
<input type="number" integer min="0" max="254"
class="ip-single-column" ng-model="network.dnsPrimary[3]" name="dnsP3" required ng-blur="dnsBlur('P', 3)"
ng-class="{'has-error': networkForm.dnsP3.$invalid}" validate-dns>
</p>
</div>
$scope.dnsBlur= function(section, pos) {
var elem = $scope.network.dnsPrimary;
var i = pos;
if(section.endsWith('P')) {
// primary
switch(i) {
case 0:
if (angular.isUndefined(elem[i]) || (elem[i] < 1 && elem[i] > 223))
elem[i] = $scope.defaultDns[i];
break;
case 1:
// if (!elem[i] || (elem[i] < 0 && elem[i] > 254))
if (angular.isUndefined(elem[i]) || (elem[i] < 0 && elem[i] > 254))
elem[i] = $scope.defaultDns[i];
break;
case 2:
if (angular.isUndefined(elem[i]) || (elem[i] < 0 && elem[i] > 255))
elem[i] = $scope.defaultDns[i];
break;
case 3:
if (angular.isUndefined(elem[i]) || (elem[i] < 0 && elem[i] > 254))
elem[i] = $scope.defaultDns[i];
break;
}
}
}
}]).directive('validateDns', ['$rootScope',
function($rootScope) {
function link($scope, elem, attrs, c) {
$scope.$watch(attrs.ngModel, function(newValue, oldValue) {
c.$setValidity('outOfRange', true);
switch(c.$name.charAt(c.$name.length - 1)) {
case 0:
if (!$scope.network.dnsPrimary[i] || ($scope.network.dnsPrimary[i] < 1 && $scope.network.dnsPrimary[i] > 223))
c.$setValidity('outOfRange', false);
break;
case 1:
if (!$scope.network.dnsPrimary[i] || ($scope.network.dnsPrimary[i] < 0 && $scope.network.dnsPrimary[i] > 255))
c.$setValidity('outOfRange', false);
break;
case 2:
if (!$scope.network.dnsPrimary[i] || ($scope.network.dnsPrimary[i] < 0 && $scope.network.dnsPrimary[i] > 255))
c.$setValidity('outOfRange', false);
break;
case 3:
if (!$scope.network.dnsPrimary[i] || ($scope.network.dnsPrimary[i] < 0 && $scope.network.dnsPrimary[i] > 254))
c.$setValidity('outOfRange', false);
break;
}
});
}
return {
require: 'ngModel',
link: link
};
}
但是,當我試圖讓模糊輸入號碼()函數。
輸入輸出或範圍時,它會變得不確定。例如,輸入999但未定義。 無論如何在Blur()中獲得999?
'validate-ip'是你寫的指令嗎?你可以添加它,所以我們可以看到它做了什麼? –