2010-10-27 12 views
29

Cuando intento cargar mi página que utiliza jQuery, cuando se golpea la siguiente línea:

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

consigo el error $ .cookie no es una función. Alguien ha visto esto antes?

+3

AFAIK, 'cookie' es un plugin jQuery. ¿Estás cargando ese complemento? –

+0

Esto puede suceder incluso si su biblioteca 'jquery' se carga dos veces. –

Respuesta

52

Eso significa que el $.cookie plugin no se incluye en la página, al menos no se está llamando. Asegúrese de que ambos estén incluidos, y se está incluyendo antes de que se está utilizando. Inclúyalo justo después de jQuery para estar seguro.

Solo un consejo: Varios otros complementos dependen del complemento de cookies (pero no necesariamente comprueban si existe antes de llamarlo), podría estar usando uno.

+1

Este era el problema, parece que mi proveedor de hosting estaba teniendo un problema al cargar jquery.cookie.js, cambiar el nombre a jqueryycookie.js resolvió el problema – Introgy

+1

Más soluciones posibles aquí: http://stackoverflow.com/questions/18024539/jquery -cookie-is-not-a-function – ElliotSchmelliot

4

No, pero puede mostrar cómo hacer una muy fácil como ...

Crear un archivo js separado, el nombre de lo que quiere, para la facilidad de esto, lo llamaré jCook.

En su cabeza, después de agregar jQuery, añadir el nuevo archivo:

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

Y a continuación es el código fácil de poner en el archivo:

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

El intento de captura y lo que no solo ayuda a asegurar que obtenga un retorno "falso" si hace algo incorrecto, pero realmente nunca debería ser un problema. Para utilizar el código es fácil ...

En su página, donde el código de carga o lo que se acaba de hacer lo siguiente:

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

Ver lo fácil que era !?

Y sólo para resolver, a continuación es un ejemplo del mundo real utilizar para guardar un estado de un selecto menú desplegable

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

Me encanta esta solución. Fácil de implementar y maneja mis objetos perfectos – PhillyNJ

+1

Impresionante, trabajó como un encanto – andypotter

0

Intente habilitar Mod_Sec para su dominio, o pedir a su empresa de alojamiento para que pueda. Espero que esto ayude.

0

He estado usando este código -

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

y funciona bien. Pero yo estaba en necesidad de usar otra versión de jQuery en una página específica en la versión 1.7.2 fue pero fue en realidad el uso 1.10.2 Después de uso múltiple versión de jQuery tengo este error -

TypeError: $.cookie is not a function

Luego utiliza jQuery.cookie en lugar de $.cookie y funciona. Espero, esto también ayudará;)

0

Para mí, el problema se solucionó después de descargar la última versión de jquery.cookie js

5

Básicamente puede haber varias razones para este problema.

  1. Es posible que no haya agregado jquery plugin.
  2. Asegúrese de incluir archivo de jQuery antes de que el plug-in de galletas
  3. Si ya ha hecho por encima de dos continuación, intente descargar la nueva versión de jquery-cookie plugin que también se resolvió mi problema.
-1
<script src="js/jquery.mobile-1.4.5.min.js"></script> 
<script src="js/jquery.cookie.js"></script> 

la primera plugin debe ser juqery.js y el segundo plugin es cookie.js