$.cookie не является функцией
Когда я пытаюсь загрузить свою страницу, которая использует jquery, при нажатии следующей строки:
if ($.cookie('compare') != null)
Я получаю ошибку $.cookie не является функцией. Кто-нибудь видел это раньше?
9 ответов
Это означает, что $.cookie
плагин не включается в страницу, по крайней мере, не вызывается. Убедитесь, что он включен и включен, прежде чем он привыкнет. Включите его сразу после самого jQuery, чтобы быть в безопасности.
Просто совет: несколько других плагинов используют плагин cookie (но не обязательно проверяют, существует ли он перед вызовом), вы можете использовать его.
В принципе, могут быть разные причины этой проблемы.
- Возможно, вы не добавили плагин jquery.
- Обязательно включите файл jQuery перед плагином cookie
- Если вы уже сделали выше двух, попробуйте загрузить новую версию плагина 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>