You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript初始化Materialize Select组件无法填充选项如何解决

无jQuery的Materialize Select动态填充解决方案

问题根因

你之前的写法混淆了Materialize Autocomplete和FormSelect组件的配置逻辑:Autocomplete支持初始化时传入data参数直接生成下拉候选项,但FormSelect组件不会根据初始化参数自动生成<option>DOM节点,它仅会对已经存在于DOM中的<option>标签做样式封装渲染。

实现步骤

  • 每次更新前清空原有除默认提示项外的所有<option>节点
  • 遍历员工列表,动态生成新的<option>节点并插入到select元素中
  • 销毁之前可能存在的FormSelect实例,重新初始化组件让新选项生效

修正后代码

function updateClientInfo(clientDataObj){
  clientObj = clientDataObj[0];
  const staffList = clientDataObj[1]; // 对应你原逻辑里的员工列表数组
  const pocSelect = document.getElementById("pocSelect");
  
  // 清空旧选项,保留第一个默认禁用的提示项
  pocSelect.innerHTML = '<option value="" disabled selected>Choose Point of Contact</option>';
  
  // 动态生成option节点插入
  staffList.forEach(staffName => {
    const option = document.createElement("option");
    option.value = staffName;
    option.textContent = staffName;
    // 若需要设置默认选中,可在此处添加 option.selected = true
    pocSelect.appendChild(option);
  });
  
  // 先销毁已有的实例避免重复初始化冲突,再重新初始化FormSelect
  const existingInstance = M.FormSelect.getInstance(pocSelect);
  if(existingInstance) {
    existingInstance.destroy();
  }
  M.FormSelect.init(pocSelect);
}

补充说明

如果你需要修改下拉框的全局配置(比如下拉弹窗的类名、是否可多选等),可以在M.FormSelect.init的第二个参数传入对应配置,下拉选项的内容完全由DOM中的<option>节点决定,不需要在初始化参数里传选项列表。

内容的提问来源于stack exchange,提问作者Thedornman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:15:07