$(...).nicescroll is not a function报错分析
問題描述:
瀏覽器報$(...).niceScroll is not a function的錯。
問題分析:
將echarts.js刪除后,此報錯沒了,初步判斷是兩個js沖突引起。
將echarts放在最后時,也無報錯,但是頁面重復加載后還會有報錯。
后查看nicescroll.Js文件
適配amd的jquery擴展時會有如下書寫:
(function(f){"function"===typeof define?&&?define.amd???define(["jquery"],f)?:?f(jQuery)})(function(f){...})
NVIDIA顯卡先加載nicescroll的時候是type define 為undefined;會走f(jQuery)此時正常無報錯。
?
但是查看echarts.js 時發現里面定義了define對象,如下圖:
并且若是在加載echarts之后再加載nicescroll時取到的define是echarts里的define對象,并且define.amd為一個object對象,如下圖
會影響到nicescroll.js的判斷而走amd的jquery對象define(["jquery"]?,?f),但實際上是NVIDIA,所以這個jquery對象不合適,從而導致里面擴展的nicescroll()方法無法生效,產生$(...).nicescroll()?is?not?a?function的報錯。
解決辦法:
?
一、若頁面無重復加載js
解決辦法:
直接將nicescroll.Js放在echarts.js前面加載即可。
?
二、若頁面有重復加載(即 雖然nicescroll放在了echarts前面,但是頁面重復加載后會再次加載nicescroll,此時已經有了echarts里的define對象,會影響對于amd的判斷)
快速解決方法:
不考慮amd判斷時,去掉"function"===typeof define&&define.amd判斷直接走f(jQuery)即可。
Ps:沒有amd的顯卡所以未做amd測試,so...對amd的影響未可知。
完美解決辦法:
全部替換echarts里面的define對象和方法--包含下方所有js對應調用的define方法
Ps:全部替換的注意里面有undefined字段影響全部替換,可將undefined全部替換為別的不影響替換的字段如undifined,之后再替換define為define_echarts,最后將undifined替換回undefined即可。
請尊重原創!轉載請注明出處!謝謝
?
總結
以上是生活随笔為你收集整理的$(...).nicescroll is not a function报错分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准MD5加密算法
- 下一篇: 英语在线听力翻译器_英语听力翻译软件下载