2012-02-03 24 views
5

Tuần này tôi đã nghiên cứu và đặt cùng một số jquery (đây là lần đầu tiên tôi làm việc với jquery) để điều khiển một menu có thể thu gọn trong một tệp sidebar.php WordPress tùy chỉnh. Trình đơn được tạo động, sử dụng wp_query để chọn và sắp xếp các loại bài tùy chỉnh theo phân loại tùy chỉnh và các thứ tự sắp xếp tùy chỉnh, v.v. (do đó không có giải pháp plugin).tại sao cookie jquery của tôi không có sẵn trên nhiều trang?

Tôi muốn duy trì trạng thái mở rộng/thu gọn của các phần menu của tôi khi khách truy cập trang web điều hướng nội dung. Sử dụng jquery có vẻ như tôi đang viết thành công tên cookie duy nhất cho trình duyệt và có vẻ như tôi đã chuyển thành công các giá trị lớp "mở rộng" hoặc "đã thu gọn" của các thẻ của tôi.

Tuy nhiên, cookie không hoạt động trên nhiều trang - nếu bạn điều hướng đến một trang khác, không có cookie mới nào được đặt cho đến khi bạn nhấp vào mục menu. Nếu bạn nhấn trình duyệt trở lại và trở về trang trước, cookie của bạn được đặt ở trang trước vẫn được đặt (điều này tốt). Lưu ý rằng khi điều hướng đến trang mới, menu sẽ được khôi phục, nhưng nội dung menu hiếm khi thay đổi (vì vậy ID ổn định) và cookie chỉ dành cho phiên hiện tại (và vẫn được giữ lại từ (các) trang trước) .

Tôi đã thử nghiệm với việc đặt cookie PHP và chúng giữ độc đáo từ trang này sang trang khác. Nhưng cookie jquery của tôi có vẻ là trang cụ thể, vì vậy tôi đang làm điều gì đó sai.

Dưới đây là đoạn code jquery xuất hiện trong trang PHP của tôi để kiểm soát thực đơn và viết các tập tin cookie của tôi (Chú ý: Tôi đang liên kết đến các 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> 

Như một ví dụ , tên cookie sẽ tự động tạo ra và giá trị giống như thế này:

genre2: sập

genre3: mở rộng

genre1outlet2: mở rộng

genre2outlet3: mở rộng

genre2outlet4: mở rộng

Như đã đề cập ở trên, tôi mới để jquery. Tôi cũng mới sử dụng cookie. Mọi sự trợ giúp sẽ rất được trân trọng.

P.S. Một khi tôi nhận được công việc này, tôi không có ý tưởng làm thế nào để có được thông tin từ mảng cookie của tôi và áp dụng các lớp học cho trình đơn của tôi - nhưng đó là một vấn đề riêng biệt.

+0

đặt đường dẫn đến/và nó sẽ – machineaddict

Trả lời

17

Tôi nghĩ bạn nên cố gắng chỉ định đường dẫn . Nó có thể trông giống như sau:

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

Sau đó, khi bạn đặt cookie khi nó sẵn có cho tất cả trang web. Đường dẫn mặc định là đường dẫn của trang con đặt cookie. Trong trường hợp đó cookie chỉ có sẵn cho trang con đó.

Quy tắc này (ý tôi là với đường dẫn) áp dụng cho cookie nói chung. Không chỉ được tạo bởi jQuery.

+0

Cảm ơn bạn đã làm rõ điều này. –

+0

Bạn được chào đón :) –

Các vấn đề liên quan