【发布时间】:2016-11-19 17:36:11
【问题描述】:
我正在尝试验证没有重复值的表单。 我有一个网站包含一个 IP 地址列表。 在我的 from 中可以添加许多地址,但它们应该是唯一的。
HTML:
<div class="col-sm-6">
<ul style="list-style-type: none;-webkit-padding-start: 0px;margin-bottom:0px">
<li ng-repeat="ip in site.ips track by $index | orderBy: '+ip.ip_adress'" style="margin-bottom:0px">
<ng-form name="ipForm">
<div class="input-group" style="margin-top:5px" ng-class="{ 'has-error' : !ipForm.ip_adress.$error.duplicate && ipForm.ip_adress.$invalid && !ipForm.ip_adress.$pristine }">
<input type="text" class="form-control input-sm" name="ip_adress"
ng-pattern='/^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})$/'
style="display: inline;"
ng-model="ip.ip_adress"
placeholder="{{translate('config.sites.msg.site.ip.adress')}}"
required />
<div class="input-group-addon">
<i class="glyphicon glyphicon-remove-circle" ng-click="removeIp(site, ip, $index)"></i>
</div>
</div>
</ng-form>
</li>
</ul>
</div>
我也试过ng-change:"verifyDuplicate()",这是 JS
$scope.verifyDuplicate = function() {
var sorted, i;
sorted = $scope.sites[0].ips.sort(function (a, b) {
if (a.ip_adress > b.ip_adress) return 1;
if (a.ip_adress < b.ip_adress) return -1;
return 0;
});
for(i = 0; i < $scope.sites.ips.length; i++) {
sorted[i].isDuplicate = ((sorted[i-1] && sorted[i-1].ip_adress == sorted[i].ip_adress) || (sorted[i+1] && sorted[i+1].ip_adress == sorted[i].ip_adress));
}
}
这会引发错误:Cannot read property 'ips' of undefined。
我也试过这个例子,但它不起作用。
有什么建议吗?
【问题讨论】:
-
你能显示$scope.sites的结构吗
-
在表单 (html) 中,您使用
site.ips作为源(site.ips应该是数组),在verifyDuplicate中您使用sites[0](sites应该是数组)。这应该匹配。在js中试试$scope.site.ips[0] -
除了你的代码有很多错误之外,如果你想设置
$duplicate的验证,你必须使用指令,否则表单将保持有效。
标签: javascript angularjs duplicates