自定义jQuery插件报错:$.myPlugin() is not a function 求助
问题原因与解决方法
你遇到的$.myPlugin is not a function错误,核心原因是插件挂载的位置不对:
- 你把插件定义在了
$.fn对象上,这个对象是用来扩展jQuery DOM元素集合方法的(比如$('.container').myPlugin()这种调用方式)。 - 但你直接用
$.myPlugin()调用,是在全局jQuery对象($)上查找这个方法,自然找不到。
两种解决方式
方式一:修改插件挂载到全局jQuery对象
把插件定义里的$.fn.myPlugin改为$.myPlugin,这样就能直接通过$.myPlugin()调用:
(function($) { // 直接挂载到全局$对象上 $.myPlugin = function() { $.ajaxPrefilter(function(options) { if (options.crossDomain) { options.url = "https://corsproxy.io/?" + options.url; } }); return this; }; }(jQuery));
方式二:保持插件挂载在$.fn,用元素集合调用
如果坚持用$.fn的方式,需要通过jQuery选中的DOM元素集合来调用,比如:
// 替换原来的$.myPlugin(); $('body').myPlugin();
不过这种方式对你的场景(全局注册ajaxPrefilter)没有意义,更推荐第一种方式。
额外注意点
确保插件注册代码在$.get执行前运行,当前代码中$.myPlugin()是同步执行的,而$(document).ready里的$.get会在DOM加载完成后执行,顺序没问题,无需调整。
内容的提问来源于stack exchange,提问作者LimetaPeta
相关产品推荐
相关产品推荐

