我有以下代码用于在Bootstrap中设置样式的选择下拉输入。
<select class="form-control" name="businessprocess" ng-model="businessprocess" required>
<option value="">-- Select Business Process --</option>
<option value="C">Process C</option>
<option value="Q">Process Q</option>
</select>
在用户能够提交此表单之前,他/她必须选择一个业务流程。
所以我将required
指令放在select语句中,但是因为第一个选项标签的-- Select Business Process --
仍然被视为选定的选项,因此满足了所需的标志,因此即使没有选择实际的业务流程,表单也会生效。
我如何克服这个问题?
谢谢。
答案 0 :(得分:30)
这种方法可以/应该解决您的问题:
1)声明范围内的选项:
$scope.processes = [
{ code: "C", name: "Process C" },
{ code: "Q", name: "Process Q" }
];
并且2)使用此声明:
<select class="form-control" name="businessprocess" ng-model="businessprocess" required
ng-options="c.code as c.name for c in processes" >
<option value="">-- Select Business Process --</option>
</select>
这里的技巧实际上是,在角度循环期间,首先会解决当前值不在processes
选项中的问题。因此,默认设置为:
<option value="">-- Select Business Process --</option>
和required
将按预期工作(more details)
答案 1 :(得分:4)
你可以在控制器中初始化选择器的值:
<select class="form-control" name="businessprocess" ng-model="businessprocess">
<option value="A">-- Select Business Process --</option>
<option value="C">Process C</option>
<option value="Q">Process Q</option>
</select>
控制器中的:
$scope.businessprocess = "A" ;
或&#34; C&#34;,&#34; Q&#34;,无论你想要什么,所以选择总是有价值的。我认为你不需要&#34;必需&#34;在这里选择。
如果您不想要init值。当用户不选择它时,也会产生一些额外的效果。
<select class="form-control" name="businessprocess" ng-model="businessprocess" myRequired>
<option value="">-- Select Business Process --</option>
<option value="C">Process C</option>
<option value="Q">Process Q</option>
</select>
然后写下指令:
model.directive("myRequired", function() {
return {
restrict: 'AE',
scope: {},
require: 'ngModel',
link: function(scope, iElement, iAttrs) {
if(iElement.val() == ""){
//do something
return;
} else {
//do other things
}
});
}
};
});
答案 2 :(得分:2)
<强> JS 强>
angular.module('interfaceApp')
.directive('requiredSelect', function () {
return {
restrict: 'AE',
require: 'ngModel',
link: function(scope, elm, attr, ctrl) {
if (!ctrl) return;
attr.requiredSelect = true; // force truthy in case we are on non input element
var validator = function(value) {
if (attr.requiredSelect && ctrl.$isEmpty(value)) {
ctrl.$setValidity('requiredSelect', false);
return;
} else {
ctrl.$setValidity('requiredSelect', true);
return value;
}
};
ctrl.$formatters.push(validator);
ctrl.$parsers.unshift(validator);
attr.$observe('requiredSelect', function() {
validator(ctrl.$viewValue);
});
}
};
});
答案 3 :(得分:2)
最好的方法,直接使用:
<强> HTML 强>
<select name="businessprocess" ng-model="businessprocess" required>
<option selected disabled value="">-- Select Business Process --</option>
<option ng-repeat="v in processes" value="{{v.id}}">{{v.value}}</option>
</select>
答案 4 :(得分:1)
您可以尝试添加表单,例如:
<强> HTML 强>
<div ng-app="myApp" ng-controller="MyCtrl">
<form name="mainForm">
<select name="businessprocess" ng-model="businessprocess" required>
<option value="">-- Select Business Process --</option>
<option ng-repeat="v in processes" value="{{v.id}}">{{v.value}}</option>
</select>
<span class="error" ng-show="mainForm.businessprocess.$error.required">required</span>
</form>
</div>
<强> JS 强>
angular.module('myApp', []);
function MyCtrl($scope, $timeout) {
$scope.processes = [{
id: "C",
value: "Process C"
}, {
id: "Q",
value: "Process Q"
}];
}
演示 Fiddle
答案 5 :(得分:0)
添加&#34;禁用&#34;到第一个选项:
<select class="form-control" name="businessprocess" ng-model="businessprocess" required>
<option value="" disabled>-- Select Business Process --</option>
<option value="C">Process C</option>
<option value="Q">Process Q</option>
答案 6 :(得分:0)
使用以下代码段
<select class="form-control" name="businessprocess" ng-model="businessprocess">
<option value="A" disabled selected hidden>-- Select Business Process --</option>
<option value="C">Process C</option>
<option value="Q">Process Q</option>
</select>
答案 7 :(得分:0)
这对我有用。除非用户选择“选择...”以外的任何其他值,否则表单无效
<select name="country" id="country" class="form-control" formControlName="country" required>
<option selected value="">Choose...</option>
<option *ngFor="let country of countries">{{country.country}}</option>
</select>
答案 8 :(得分:-1)
也许这段代码对此有用......在这种情况下,表单称为myform
<select ng-model="selectX" id="selectX" name="selectX" required>
<option value="" ></option>
<option value="0" >0</option>
<option value="1">1</option>
</select>
<span style="color:red" ng-show="myform.selectX.$dirty && myform.selectX.$invalid">
<span ng-show="myform.selectX.$error.required">Is required.</span>
</span>