【问题标题】:select.options is undefined when trying to loop through ListBoxFor()尝试循环遍历 ListBoxFor() 时未定义 select.options
【发布时间】:2021-10-09 17:22:35
【问题描述】:

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

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

【问题讨论】:

    标签: javascript asp.net razor


    【解决方案1】:

    您已收到选择定义中的选项,

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

    然后您尝试访问 for 中的选项

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

    我建议你从 $('#Select') 中删除 .options

    【讨论】:

      【解决方案2】:

      您已经在此处读取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;
      }
      

      【讨论】:

      • 我这样做了,但仍然给我选项 [i] 未定义.. 有什么想法吗?
      • @JuniorDevCaput:您能否更新问题以提供minimal reproducible example 来演示问题?由于我们只是在谈论客户端代码,因此请关注由服务器端代码生成的结果标记,您可以在问题中创建一个可运行的代码 sn -p 进行演示。
      • @JuniorDevCaput:我刚刚注意到您的代码有错字。在您的第二个循环中,您将递增i 而不是k。如果你console.logi 的值,你会看到它超过了options 的长度导致错误。将第二个循环更改为递增 kthe code works
      • 天哪,你是对的。谢谢!虽然我现在没有错误,但它仍然没有选择列表中的选项.. 可能这不是要走的路。感谢您的帮助,很抱歉浪费您的时间。
      猜你喜欢
      • 2013-02-19
      • 2015-11-25
      • 2017-05-27
      • 2023-03-25
      • 2012-06-03
      • 2017-02-08
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多