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

Materialize CSS下拉框change事件返回值延迟异常求助

Materialize Select组件选中值滞后的问题分析与解决

问题原因

你遇到的选中值滞后(首次返回undefined,后续返回上一次选中值)的问题,核心原因是原生change事件的触发时机早于Materialize FormSelect组件内部状态的更新。

Materialize的Select组件是对原生select元素的封装增强,当用户选择选项时,浏览器会先触发原生select的change事件,而此时Materialize组件还未完成自身选中状态的同步更新。这就导致你在原生change事件中调用instance.getSelectedValues()时,拿到的是组件更新前的旧值,从而出现了滞后的现象。

解决方案

有两种简单的修复方式,任选其一即可:

方案1:直接使用原生select的value属性

原生select元素的value会在用户选择时实时更新,不受Materialize组件更新延迟的影响,直接获取即可得到当前选中的正确值:

document.addEventListener("DOMContentLoaded", function () {
  const selects = document.querySelector("select");
  M.FormSelect.init(selects, {});
  const selectOption = document.querySelector("#option-select");
    
  selectOption.addEventListener("change", function () {
    console.log(this.value); // 直接获取原生select的value
  });
});

方案2:使用Materialize组件的onChange回调

在初始化FormSelect组件时,传入onChange配置项,这个回调会在组件内部状态更新完成后触发,确保拿到的是最新的选中值:

document.addEventListener("DOMContentLoaded", function () {
  const selectOption = document.querySelector("#option-select");
  // 初始化时绑定组件内部的onChange回调
  const instance = M.FormSelect.init(selectOption, {
    onChange: function() {
      const selectedValues = instance.getSelectedValues();
      console.log(selectedValues[0]);
    }
  });
});

这两种方式都能解决选中值滞后的问题,方案1更简洁直接,方案2适合需要依赖Materialize组件API的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:40:26