Javascript 从控制器中选择“选择框”选项

Javascript 从控制器中选择“选择框”选项,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我做了很多搜索,并尝试了数十亿种不同的谷歌搜索组合,但在这个问题上我能找到的只是如何在选择框中设置默认选项 我有一个页面,管理员可以从用户列表中选择一个用户,然后Angular JS获取该用户的用户id(使用ng change),通过POST将其发送到DB,然后目标是将其他输入的值更改为DB中的值。我有这些值,但在使用该值使我的状态选择框更改为用户状态时遇到了问题 有关JS: $scope.getUserInfo = function(user_id) { thi

我做了很多搜索,并尝试了数十亿种不同的谷歌搜索组合,但在这个问题上我能找到的只是如何在选择框中设置默认选项

我有一个页面,管理员可以从用户列表中选择一个用户,然后Angular JS获取该用户的用户id(使用ng change),通过POST将其发送到DB,然后目标是将其他输入的值更改为DB中的值。我有这些值,但在使用该值使我的状态选择框更改为用户状态时遇到了问题

有关JS:

$scope.getUserInfo = function(user_id) {
                this.user_id = user_id;
                $http.post("lib/scripts/managing_user.php", {func: 'retrieve_user_info', user_id: this.user_id}).
                    success(function(data) {
                        console.log(data);
                        $scope.is_active = data['0']['active'];
                        //Interacts with the ng-checked directive. It takes a bool, and data returns 0 or 1 in active.
                        $scope.username = data['0']['username'];
                        //Assigns the data value to the ng-model directive with the value username
                        //Have to treat data as a 2D array because that is how it is returned
                        $scope.email = data['0']['email'];
                        $scope.fName = data['0']['first_name'];
                        $scope.lName = data['0']['last_name'];
                        $scope.schoolList = data['0']['school_id']; (<-Does not work)
                    }).
这是我想要更改的选择框

<div class="row-fluid">
   <span class="adduser_heading">School:</span>
   <select id="school" class="adduser_input" ng-model="user.schoolList" ng-options="name.school_name for (key, name) in schoolList" ng-disabled="is_disabled" name="school" style="width: 246px;"></select>
</div>  
这是DB返回的关于学校的信息的格式。我真的不想发布“数据”,因为它有一个真实的人的信息。基本上,有关学校的信息如下所示

school_id: "106"
school_name: "Central Campus High School"

当您将默认值分配给
$scope.schoolList
时,您的ng模型被设置为
user.schoolList

它应该是
$scope.user.schoolList


如果要使用find函数,仍然需要返回正确的对象,而不仅仅是名称;你需要修复你的函数。因此,类似这样的方法应该有效:

$scope.findInSchoolList = function(school_id) {
    for(var i = 0; i < $scope.schoolList.length; i++) {
        if ($scope.schoolList[i].school_id == school_id) {
           return $scope.schoolList[i];
        }
    }
};
$scope.findInSchoolList=函数(学校id){
对于(变量i=0;i<$scope.schoolList.length;i++){
if($scope.schoolList[i].school\u id==学校id){
返回$scope.schoolList[i];
}
}
};

下面是一个工作示例:

angular.module('app',[])
.controller('Ctrl',函数($scope){
var findInSchoolList=函数(学校id){
对于(变量i=0;i<$scope.schoolList.length;i++){
if($scope.schoolList[i].school\u id==学校id){
返回$scope.schoolList[i];
}
}
};
$scope.schoolList=[{
学校编号:“1”,
学校名称:“中央校区高中”
}, {
学校编号:“106”,
学校名称:“另一所高中”
}, {
学校编号:“231”,
学校名称:“又一所高中”
}, {
学校编号:“23”,
学校名称:“正确的高中”
}, {
学校编号:“2”,
学校名称:“最后一所高中”
}]
$scope.user={
学校名单:findInSchoolList(23)
}
})

学校:

您必须从填充列表的数组中选择项目,例如,如果您有:

$scope.school_list = [{id:1, name:'harvard'}, {id:2, name:'other'}]
并且您要使用以下选项进行选择:

$scope.user.schoolList = {id:1, name:'harvard'}
它不起作用,您必须创建一个函数,在数组中查找元素,然后将其分配给$scope.user.schoolList变量(该变量绑定到列表的ng模型)

你必须这样做:

$scope.user.schoolList = findInSchoolList({id:1, name:'harvard'})
它将从选择列表中选择项目


希望对您有所帮助

谢谢您的回复。我确实试过(刚才又试了一次),但没有成功。选择框保留在默认选项(空白点),而不是前往所选用户的学校。不客气。这可能是因为您没有为其指定正确的对象。您没有指定学校列表的外观,但请确保user.schoolList引用选项列表对象中的元素。我按照您的建议,使findInSchoolList函数如您所说。我得到了学校的名称(来自一个由school_name和school_id组成的对象数组),并仅将名称返回到$scope.user.schoolList。试过了,什么都没有。所选选项未更改。否,因为必须从原始数组返回完整对象
$scope.user.schoolList = {id:1, name:'harvard'}
$scope.user.schoolList = findInSchoolList({id:1, name:'harvard'})