首页 > 解决方案 > 尝试循环遍历 ListBoxFor() 时未定义 select.options

问题描述

我收到这个错误,我不明白为什么。请帮忙。我试图做的是遍历多选列表上的所有选项。

HTML/剃刀

@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] 未定义

标签: javascriptasp.netrazor

解决方案


您已经在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;
}

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

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

然后循环它更直观:

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

并且访问每个选项都很清楚:

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

推荐阅读