select.options 在尝试循环 ListBoxFor() 时未定义

select.options is undefined when trying to loop through ListBoxFor()

我收到此错误,但我不明白为什么。请帮忙。 我想做的是遍历多选列表中的所有选项。

HTML/Razor

@Html.ListBoxFor(model => model.SelectedUsersIdsArray, new MultiSelectList(Model.Users, "ID", "NAME"), new { id = "Select", multiple = "multiple" })

JavaScript

var filterFuncionarios = [];
    @foreach (var f in Model.Funcionarios)
    {
        @:filterFuncionarios.push({ Id: "@f.ID"})
    }
    var selecionados = $('#usersSelectDropdown')[0].options;
    
    function filtraListDeFuncionarios() {
        for (var i = 0; i < this.selecionados.length; i++) {
            for (var k = 0; k < filterFuncionarios.length; i++) {
                if (selecionados[i].value == filterFuncionarios[k].Id) {
                    selecionados[i].selected = true;
                }
            }
        }
    }

这是我的确切代码 运行。

错误 未捕获的类型错误:selecionados[i] 未定义

您收到了 select 定义中的选项,

var select = $('#Select')[0].选项;

然后您尝试访问 for

中的选项

select.options[i].selected = true;将等于 $('#Select')[0].options.options;

我建议您从 $('#Select')

中删除 .options

您已经在此处阅读 options 数组:

var select = $('#Select')[0].options;

你循环的:

for (var i = 0; i < select.length; i++) {

但随后您尝试读取同一个数组上的另一个 options 属性:

if (select.options[i].value == filterFuncionarios[k].Id) {
    select.options[i].selected = true;
}

总的来说,您对糟糕的变量名感到困惑。初始变量称为“select”,但它不是“select”。这是一系列选项。所以称它为:

var options = $('#Select')[0].options;

然后循环遍历更直观:

for (var i = 0; i < options.length; i++) {

访问每个选项都很清楚:

if (options[i].value == filterFuncionarios[k].Id) {
    options[i].selected = true;
}