2010-10-27 19 views
29

Quando provo a caricare la mia pagina che utilizza jQuery, quando la seguente riga è colpito:

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

ottengo l'errore $ .cookie non è una funzione. Qualcuno l'ha visto prima?

+3

per quanto ne so, 'cookie' è un plugin jQuery. Stai caricando quel plugin? –

+0

Ciò può accadere anche se la tua libreria 'jquery' viene caricata due volte. –

risposta

52

Ciò significa che la $.cookie plugin non è stata inclusa nella pagina, almeno non essere è sempre chiamato. Assicurati che sia incluso ed è incluso prima dello che si sta abituando. Includilo subito dopo che jQuery stesso è sicuro.

Solo un consiglio: Diversi altri plugin si basano sul plug-in di cookie (ma non necessariamente verificare se esiste prima di chiamare), si potrebbero utilizzare uno.

+1

Questo era il problema, sembra che il mio provider di hosting avesse problemi a caricare jquery.cookie.js, rinominare jqueryycookie.js risolto il problema – Introgy

+1

Altre possibili soluzioni qui: http://stackoverflow.com/questions/18024539/jquery -cookie-is-a-function – ElliotSchmelliot

4

No, ma io in grado di mostrare come fare uno molto facile come ...

Creare un file js separato, il nome è quello che si vuole, per la facilità di questo, lo chiamerò jCook.

Nella tua testa, dopo aver aggiunto jQuery, aggiungere il nuovo file:

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

E sotto è il codice facile mettere nel file:

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

La cattura tentativo e non quello aiuta solo ad assicurarti di ottenere un ritorno "falso" se fai qualcosa di sbagliato, ma in realtà non dovrebbe mai essere un problema. Per utilizzare il codice è facile ...

Sulla tua pagina, in cui il codice di carico o qualsiasi altra cosa è solo effettuare le seguenti operazioni:

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

Vedere come semplice che era !?

E proprio per risolvere, sotto è un esempio reale mondo utilizzano per salvare uno stato di un selezionato menu a tendina

$(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

Amo questa soluzione. Facile da implementare e gestisce perfettamente i miei oggetti – PhillyNJ

+1

Impressionante, ha funzionato come un incantesimo – andypotter

0

Prova permettendo Mod_Sec per il dominio, o chiedere la vostra società di hosting per abilitarla. Spero che questo ti aiuti.

0

Sto usando questo codice -

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

e funziona benissimo. Ma ero in-necessità di utilizzare un'altra versione jQuery in una pagina specifica in cui versione era 1.7.2, ma mi è stato effettivamente utilizzato 1.10.2 Dopo l'uso multiplo versione jQuery ho ottenuto questo errore -

TypeError: $.cookie is not a function

poi ho usato jQuery.cookie invece di $.cookie e funziona. Spero, questo aiuterà anche;)

0

Per me il problema è stato risolto dopo aver scaricato l'ultima versione di jQuery.cookie js

5

Fondamentalmente potrebbero esserci vari motivi per questo problema.

  1. Potresti non aver aggiunto il plug-in jQuery.
  2. Assicurati di includere file di jQuery prima che il plugin biscotto
  3. Se avete già fatto in precedenza due quindi provare a scaricare la nuova versione di jquery-cookie plugin che anche risolto il mio problema.
-1
<script src="js/jquery.mobile-1.4.5.min.js"></script> 
<script src="js/jquery.cookie.js"></script> 

il primo plugin deve essere juqery.js e il secondo plugin è cookie.js

Problemi correlati