Materialize CSS Select组件二次调用material_select()报错求助
解决Materialize CSS Select二次初始化的TypeError问题
嘿,我太懂你这种困扰了——Materialize的select组件确实好用,但动态更新后重新初始化时总会出些小状况,我之前也踩过这个坑!
这个Uncaught TypeError报错大概率是因为你在重新初始化前没销毁原有的Materialize实例,DOM里残留的旧实例和新的初始化调用撞车了。试试按这个流程来:
- 第一步:填充新选项前,先销毁已有的select实例:
$('select').material_select('destroy'); - 第二步:执行你原来的填充select选项的函数
- 第三步:重新初始化Materialize select组件:
$('select').material_select();
还有几个小细节能帮你避坑:
- 如果是异步填充选项(比如从接口拉数据),一定要等数据完全插入DOM后再执行初始化,不然会因为DOM还没更新完找不到元素报错。
- 尽量给需要动态更新的select加专属类/ID,别用全局的
$('select'),避免影响页面上其他不需要更新的select组件,比如用$('.dynamic-select').material_select()会更精准。
给你个完整的示例参考:
// 动态更新select的函数 function refreshSelectOptions() { // 先销毁旧实例 $('.dynamic-select').material_select('destroy'); // 清空原有选项并添加新内容 $('.dynamic-select').empty(); $('.dynamic-select').append('<option value="opt1">新选项1</option>'); $('.dynamic-select').append('<option value="opt2">新选项2</option>'); // 重新初始化组件 $('.dynamic-select').material_select(); }
要是还报错,再检查下:
- Materialize JS有没有在jQuery之后加载(它依赖jQuery,顺序错了会出各种问题)
- 第一次初始化是不是放在
$(document).ready()里执行的,确保DOM加载完成后再初始化
希望这些方法能帮你搞定问题!
内容的提问来源于stack exchange,提问作者Emil Wismann Kirkebæk-Jensen
相关产品推荐
相关产品推荐

