$ .cookie不是一个功能

时间:2010-10-27 14:11:41

标签: javascript jquery

当我尝试加载使用jquery的页面时,遇到以下行:

if ($.cookie('compare') != null) 

我收到错误$ .cookie不是函数。有没有人见过这个?

10 个答案:

答案 0 :(得分:52)

这意味着页面中没有包含$.cookie plugin,至少不会被调用。确保它们都被包含在内,并且在之前被包含在内。在jQuery本身之后包含它是安全的。

只是一个提示:几个其他插件依赖于cookie插件(但不一定在调用之前检查它是否存在),你可以使用它。

答案 1 :(得分:10)

你有jQuery cookie plugin吗?

答案 2 :(得分:4)

不,但我可以告诉你如何使一个非常容易... ...

创建一个单独的js文件,将其命名为您想要的,为了便于此,我将其称为jCook。

在标题中,添加jQuery后,添加新文件:

<script type="text/javascript" src="jquery.js"></script>  
<script type="text/javascript" src="jCook.js"></script>  <!-- here it is! -->

以下是放入文件中的EASY代码:

(function($) {
    if (!$.setCookie) {
        $.extend({
            setCookie: function(c_name, value, exdays) {
                try {
                    if (!c_name) return false;
                    var exdate = new Date();
                    exdate.setDate(exdate.getDate() + exdays);
                    var c_value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
                    document.cookie = c_name + "=" + c_value;
                }
                catch(err) {
                    return false;
                };
                return true;
            }
        });
    };
    if (!$.getCookie) {
        $.extend({
            getCookie: function(c_name) {
                try {
                    var i, x, y,
                        ARRcookies = document.cookie.split(";");
                    for (i = 0; i < ARRcookies.length; i++) {
                        x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
                        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
                        x = x.replace(/^\s+|\s+$/g,"");
                        if (x == c_name) return unescape(y);
                    };
                }
                catch(err) {
                    return false;
                };
                return false;
            }
        });
    };
})(jQuery);

尝试捕获以及不仅仅有助于确保在出现错误时获得“错误”返回,但实际上不应该成为问题。使用代码很简单......

在您的页面上,您的加载代码或其他任何内容只是执行以下操作:

$.setCookie("nameOfCookie", "someValue", 30); // where 30 is the number 
// of days to expire, or you could leave blank as:
$.setCookie("nameOfCookie", "someValue")

// And to retrieve your cookie
$.getCookie("nameOfCookie");

看看有多简单!?

只是要解决,下面是用于保存选择下拉菜单状态的真实示例

$(function(){
        $("select[name=somthing]").change(function(e) {
            $.setCookie("selectThis", $(this).val());
        });
        //  And to use ...
        if ($.getCookie("selectThis")) $("select[name=somthing]").val( $.getCookie("selectThis") ).change();
});

答案 3 :(得分:3)

基本上这个问题可能有多种原因。

  1. 您可能没有添加jquery插件。
  2. 确保在cookie插件之前包含jQuery文件
  3. 如果您已经完成了上述两项工作 然后尝试下载jquery-cookie plugin的新版本 这也解决了我的问题。

答案 4 :(得分:0)

尝试为您的域启用Mod_Sec,或要求您的托管公司启用它。希望这会有所帮助。

答案 5 :(得分:0)

我们的Drupal 7安装中出现了同样的问题。如果我理解正确,它是由cPanel中的ModSecurity配置阻止文件引起的。见http://forums.cpanel.net/f5/mod-security-blocking-jquery-cookie-javascript-drupal-installation-191002.html

答案 6 :(得分:0)

我一直在使用这段代码 -

if( $.cookie('siteLayout') != undefined ){
   if( $.cookie('siteLayout') == 'compact' ) 
   $(settings.bodyElem).addClass('container');
}

它工作正常。但我需要在特定页面中使用另一个jQuery版本,其中版本为1.7.2但我实际上使用1.10.2使用多个jQuery版本后我收到此错误 -

  

TypeError:$ .cookie不是函数

然后我使用了jQuery.cookie而不是$.cookie并且它有效。希望,这也会有所帮助;)

答案 7 :(得分:-1)

对我来说,下载最新版本的jquery.cookie js

后问题已解决

答案 8 :(得分:-1)

$。cookie不是标准的jQuery函数 当包含cookie脚本时,请确保包含jQuery FIRST,然后包含cookie插件。 即

<script src="~/Scripts/jquery-2.0.3.js" type="text/javascript"></script>

应始终优先于

<script src="~/Scripts/jquery_cookie.js" type="text/javascript"></script>

答案 9 :(得分:-2)

<script src="js/jquery.mobile-1.4.5.min.js"></script>
<script src="js/jquery.cookie.js"></script>

第一个插件必须是juqery.js,第二个插件是cookie.js