点击弹窗OK按钮报错jQuery.cookie is not a function求助
首先,这个错误的核心是你的代码尝试调用jQuery.cookie()方法,但当前环境下的jQuery对象并没有挂载这个方法。哪怕你已经引入了插件,大概率是插件版本适配或者加载时机的问题,下面给你拆解可能的原因和对应的解决办法:
1. 你可能用了新版「js-cookie」而非旧版「jquery-cookie」
原来的jquery-cookie插件已经停止维护,官方迁移到了「js-cookie」项目,而且新版不再把方法挂载到jQuery对象上,而是直接暴露全局的Cookies对象。如果你引入的是新版js-cookie,那jQuery.cookie()自然会报错。
解决办法:
把代码里所有jQuery.cookie()相关的调用替换成js-cookie的API:
- 检查cookie是否存在:
jQuery.cookie(a)→Cookies.get(a) - 设置cookie:
jQuery.cookie(a, !0, { expires: 30 })→Cookies.set(a, true, { expires: 30 }) - 删除cookie:
jQuery.removeCookie(a)→Cookies.remove(a)
修改后的核心代码片段:
(function() { var a = "klmcookie"; localStorage.debug && Cookies.remove(a); Cookies.get(a) || ( // ... 你的样式和DOM插入代码不变 ... jQuery(function() { var slide = function () { jQuery(".cookie").slideDown(300, 'swing'); } window.setTimeout(slide, 3000); jQuery("#accept").click(function() { Cookies.set(a, true, { expires: 30 }); jQuery(".cookie").slideUp(300, 'swing'); }); }) ) })();
2. 脚本加载顺序或时机有问题
虽然你说按顺序引入了jQuery和插件,但可能存在以下情况:
- 插件脚本用了
defer或async属性,导致插件加载完成晚于你的业务代码执行 - 页面中存在其他脚本覆盖了
jQuery变量 - 插件脚本加载失败(比如路径错误,可在控制台「Network」标签查看是否有404)
解决办法:
- 检查浏览器控制台的「Network」标签,确认插件脚本是否成功加载、路径是否正确
- 确保插件脚本紧跟在jQuery脚本之后引入,且不要给插件脚本加
defer/async(如果你的业务代码是同步执行的) - 把你的业务代码完全包裹在
jQuery(document).ready()中,确保DOM和所有脚本都加载完成后再执行
3. 开启了jQuery的noConflict模式
如果页面中引入了其他和jQuery冲突的库(比如Prototype),你可能用了jQuery.noConflict()释放了$甚至jQuery变量,导致插件无法正确挂载方法到jQuery对象上。
解决办法:
- 确认插件脚本是在
jQuery.noConflict()之后引入的,这样插件会使用最新的jQuery变量引用 - 或者在插件引入前,把jQuery保存到一个独立变量,比如:
var $j = jQuery.noConflict(); // 然后引入插件脚本,之后用$j.cookie()调用(如果用的是旧版jquery-cookie)
最后,建议优先检查第一种情况——毕竟现在绝大多数项目用的都是新版js-cookie,这是最常见的原因。
内容的提问来源于stack exchange,提问作者glln
相关产品推荐
相关产品推荐

