Materialize框架material_select()报Uncaught TypeError错误求助
我完全懂你现在的困扰——同样在document.ready里初始化的方法,sidenav()好好的,material_select()却报类型错误,这种不一致的情况真的很闹心。结合你给出的信息,我整理了几个大概率能解决问题的方向,你可以逐个排查:
先确认Materialize库是否完整引入且顺序正确
你贴的Materialize脚本链接是截断的,首先得确保你引入的是完整、正确版本的Materialize库,而且必须在jQuery之后引入!Materialize完全依赖jQuery,顺序搞反的话,很多方法根本没法挂载到jQuery对象上,这是这类报错最常见的原因。
给你个正确的引入示例参考:<script src="https://code.jquery.com/jquery-3.2.1.js"></script> <!-- 这里用的是Materialize 1.0.0的完整CDN链接,你可以根据自己需求换对应版本 --> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>检查目标select元素是否在初始化时已经存在
如果你的select是动态生成的(比如通过AJAX加载数据后渲染、或者用模板引擎生成),那document.ready执行的时候,这个元素可能还没被加到DOM里,自然找不到对应的方法。
你可以先加个判断确认元素存在,再调用初始化方法:$(document).ready(function(){ $('.sidenav').sidenav(); const $targetSelect = $('select'); if ($targetSelect.length > 0) { $targetSelect.material_select(); } else { console.log("页面里找不到需要初始化的select元素哦"); } });如果是动态生成的元素,记得要在元素渲染完成后再调用
material_select(),而不是只在document.ready里执行一次。验证jQuery和Materialize的版本兼容性
你用的是jQuery 3.2.1,要确认你用的Materialize版本和这个jQuery版本兼容。比如Materialize 1.0.0及以上是支持jQuery 3.x的,但如果是更老的Materialize版本,可能会和jQuery 3.x有语法冲突。要是拿不准,可以换成Materialize官方推荐的对应jQuery版本试试。排查是否存在脚本冲突
有时候页面里其他JS库(比如Prototype、Zepto)会和jQuery抢$这个全局变量,导致jQuery的方法被覆盖。你可以试试用jQuery的全名来调用方法,避开冲突:jQuery(document).ready(function(){ jQuery('.sidenav').sidenav(); jQuery('select').material_select(); });
内容的提问来源于stack exchange,提问作者KaneJM

