2012-02-03 4 views
5

Questa settimana ho ricercato e assemblato alcuni jquery (è la prima volta che lavoro con jquery) per controllare un menu comprimibile in un file sidebar.php personalizzato di WordPress. Il menu viene generato dinamicamente, utilizzando wp_query per selezionare e ordinare i tipi di post personalizzati in base a tassonomie personalizzate e ordini di ordinamento personalizzati, ecc. (Quindi non esiste una soluzione plug-in).perché i miei cookie jQuery non sono disponibili su più pagine?

Desidero mantenere lo stato di espansione/compressione delle sezioni del menu mentre i visitatori del sito navigano nel contenuto. Utilizzando jquery sembra che stia scrivendo nomi di cookie univoci per il browser, e sembra che stia superando con successo i valori di classe "espanso" o "compresso" dei miei tag.

Tuttavia, i cookie non funzionano su più pagine: se si passa a un'altra pagina, non vengono impostati nuovi cookie finché non si fa clic su una voce di menu. Se si preme il browser posteriore e si torna alla pagina precedente, i cookie impostati nella pagina precedente sono impostati su (che è buono). Si noti che quando si naviga in una nuova pagina il menu viene rigenerato, ma il contenuto del menu cambia raramente (quindi gli ID sono stabili) e i cookie sono solo per la sessione corrente (e dovrebbero ancora essere trattenuti dalle pagine precedenti) .

Ho sperimentato con l'impostazione dei cookie PHP, e si conservano bene da una pagina all'altra. Ma i miei jquery cookie sembrano essere specifici della pagina, quindi sto facendo qualcosa di sbagliato.

Ecco il codice jQuery che appare nella mia pagina PHP per controllare il menu e scrivere i miei biscotti (NOTA: Io sto il collegamento al plugin jquery.cookie.js):

 <script type="text/javascript"> 
     $(document).ready(function() { 
      setTimeout(function() { 
       $('#port-menu > li > a.expanded + ul, #port-menu > li ul li > a.collapsed + ul').slideToggle('medium'); 
       $('#port-menu > li > a').click(function() { 
        $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium'); 
        var vartag = $(this).get(0).tagName.toLowerCase(); 
        var varclass = $(this).attr('class'); 
        var cookiename = $(this).parent().attr('id'); 
        $.cookie(cookiename, $(this).attr('class')); 
       }); 
       $('#port-menu > li ul li > a').click(function() { 
        $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium'); 
        var vartag = $(this).get(0).tagName.toLowerCase(); 
        var varclass = $(this).attr('class'); 
        var vargenre = $(this).parent().parent().parent().attr('id'); 
        var varoutlet = $(this).parent().attr('id'); 
        var cookiename = vargenre + varoutlet; 
        $.cookie(cookiename, $(this).attr('class')); 
       }); 
      }, 250); 
     }); 
    </script> 

A titolo di esempio , i nomi dei cookie creati in modo dinamico e valori sembrano qualcosa di simile:

genre2: crollato

genre3: espansa

genre1outlet2: Espanso

genre2outlet3: ampliati

genre2outlet4: ampliati

Come accennato in precedenza, Sono nuovo di jQuery. Sono anche nuovo di usare i cookie. Qualsiasi aiuto sarebbe molto apprezzato.

P.S. Una volta ottenuto questo lavoro, non ho idea di come ottenere le informazioni dalla mia gamma di cookie e applicare le classi al mio menu - ma questo è un problema separato.

+0

impostare il percorso per/e sarà – machineaddict

risposta

17

Penso che dovresti provare a specificare un percorso . Potrebbe essere il seguente:

$.cookie(cookiename, $(this).attr('class'), { path: '/' }); 

Quindi quando si imposta il cookie una volta sarà disponibile per tutto il sito Web. Il percorso predefinito è il percorso della pagina secondaria che imposta il cookie. In quel caso il cookie è disponibile solo per quella sottopagina.

Questa regola (intendo con percorsi) si applica ai cookie in generale. Non solo quelli creati da jQuery.

+0

Grazie per chiarire questo. –

+0

Prego :) –

Problemi correlati