Javascript 如何限制下拉列表值
这是你的电话号码 在JSFIDLE中有一个将动态添加的下拉字段。第一个选择的值不应显示在第二个添加的下拉列表中。因此,我不会有重复的问题。如何在angularjs中实现此功能Javascript 如何限制下拉列表值,javascript,html,angularjs,Javascript,Html,Angularjs,这是你的电话号码 在JSFIDLE中有一个将动态添加的下拉字段。第一个选择的值不应显示在第二个添加的下拉列表中。因此,我不会有重复的问题。如何在angularjs中实现此功能 <select ng-model="personalDetail.fname" ng-repeat="x in names"> </select $scope.names = ["Emil", "Tobias", "Linus"]; 每个下拉列表都必须根据之前所做的选择跟踪可用名称 将$s
<select ng-model="personalDetail.fname" ng-repeat="x in names">
</select
$scope.names = ["Emil", "Tobias", "Linus"];
每个下拉列表都必须根据之前所做的选择跟踪可用名称
将$scope.names
声明移动到控制器顶部
$scope.names = ["Emil", "Tobias", "Linus"];
然后将names
属性添加到personaldail
对象中,此属性将用于根据以前的选择跟踪可用名称
$scope.personalDetails = [
{
'names':$scope.names
}];
现在,您可以修改addNew函数,以便在添加下拉列表时设置正确的值数
$scope.addNew = function(){
$scope.personalDetails.push({
'fname': "",
'lname': "",
'email': "",
// Make a copy of the values set for the previous drop down
'names': $scope.personalDetails[$scope.personalDetails.length - 1].names.slice()
});
// Determine the value of the previous selected name
var previousSelectedName = $scope.personalDetails[$scope.personalDetails.length - 2].fname;
// Get the index of the previous selected name
var index = $scope.personalDetails[$scope.personalDetails.length - 1].names.indexOf(previousSelectedName);
// Remove the name from the valid names list
if(index > -1){
$scope.personalDetails[$scope.personalDetails.length - 1].names.splice(index, 1);
}
}
}
还请记住更新ng repeat以使用新名称personalDetail.names属性
<tr ng-repeat="personalDetail in personalDetails">
<td>
<select ng-model="personalDetail.fname" ng-options="x for x in personalDetail.names">
</select>
</td>
</tr>
这是新的演示
请注意,我没有处理没有名字可供选择的情况。但这种情况应该很容易处理。请找到下面的解决方案。我想它解决了你的问题
var-app=angular.module(“myapp”,[]);
app.controller(“ListController”、[“$scope”、函数($scope){
$scope.personalDetails=[{
“fname”:“穆罕默德”,
}];
$scope.names=[“穆罕默德”、“埃米尔”、“托拜厄斯”、“利纳斯”];
$scope.namesTemp=[“穆罕默德”、“埃米尔”、“托拜厄斯”、“利纳斯”];
$scope.addNew=函数(personalDetail){
if(personaldail!=未定义&&personaldail.fname!=未定义){
var index=$scope.namesTemp.indexOf(personaldail.fname)//