$.cookie не является функцией

Когда я пытаюсь загрузить свою страницу, которая использует jquery, при нажатии следующей строки:

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

Я получаю ошибку $.cookie не является функцией. Кто-нибудь видел это раньше?

9 ответов

Решение

Это означает, что $.cookie плагин не включается в страницу, по крайней мере, не вызывается. Убедитесь, что он включен и включен, прежде чем он привыкнет. Включите его сразу после самого jQuery, чтобы быть в безопасности.

Просто совет: несколько других плагинов используют плагин cookie (но не обязательно проверяют, существует ли он перед вызовом), вы можете использовать его.

У вас есть плагин jQuery cookie?

В принципе, могут быть разные причины этой проблемы.

  1. Возможно, вы не добавили плагин jquery.
  2. Обязательно включите файл jQuery перед плагином cookie
  3. Если вы уже сделали выше двух, попробуйте загрузить новую версию плагина jquery-cookie, которая также решила мою проблему.

Нет, но я могу показать вам, как сделать это очень просто, как...

Создайте отдельный файл js, назовите его как хотите, для простоты я назову его jCook.

В своем заголовке после добавления jQuery добавьте новый файл:

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

А ниже находится простой код, который нужно вставить в файл:

(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);

Попытка catch и что не только помогает гарантировать, что вы получите "ложное" возвращение, если вы делаете что-то не так, но на самом деле не должно быть проблемой. Использовать код легко...

На вашей странице, где ваш код загрузки или что-то еще, просто сделайте следующее:

$.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();
});

Та же проблема возникла в нашей установке Drupal 7. Это было вызвано, если я правильно понимаю, конфигурацией ModSecurity в cPanel, блокирующей файл. См. http://forums.cpanel.net/f5/mod-security-blocking-jquery-cookie-javascript-drupal-installation-191002.html

Попробуйте включить Mod_Sec для своего домена или попросите хостинговую компанию включить его. Надеюсь это поможет.

Для меня проблема была исправлена ​​после загрузки последней версии jquery.cookie js

Я использовал этот код -

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

И это прекрасно работает. Но мне было нужно использовать другую версию jQuery на определенной странице, где была версия 1.7.2, но я фактически использовал 1.10.2 После использования нескольких версий jQuery я получил эту ошибку -

Ошибка типа: $.cookie не является функцией

тогда я использовал jQuery.cookie вместо $.cookie и это работает. Надеюсь, это тоже поможет;)

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

первый плагин должен быть juqery.js, а второй плагин - cookie.js

$.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>
Другие вопросы по тегам