Вспоминая последнее открытое состояние - PullRequest
2 голосов
/ 27 марта 2009

На сайте http://www.ryancoughlin.com/hp/?c=posters, Я использую этот код для левой стороны:

$(".menu-header").click(function() {
        $(this).next().toggle('slow');
        return false;
}).next().hide();

Если вы откроете один из них и нажмете другой раздел, он закроется, есть ли способ сохранить это состояние открытым?

Ответы [ 2 ]

4 голосов
/ 27 марта 2009

Ваши разделы сохраняют свои штрафа в открытом состоянии, но закрываются, когда вы открываете новую страницу.

Однако ваш вопрос не устраняет неоднозначность между этими двумя проблемами.

Чтобы вы могли работать на этих страницах, вам нужно ввести переменную, чтобы определить, на какой странице вы находитесь.

   jQuery(function($){ 
     var matches;
     if( matches = (new String(document.location)).match(/\?c=\w+/) ) {  
        $("a[href=" + matches[0] + "]").parents("ul").toggle(); 
     }
   });

Должен работать как краткосрочное решение.

Таким образом, полный код будет (аннотирован)

/* Document Ready, $ = jQuery inside this scope regardless  */

jQuery(function($){  

  /* Bind the click event on all the menus, then hide them all. */

  $(".menu-header").click(function() {
            $(this).next().toggle('slow');
            return false;
  }).next().hide();
  /*
   * Check to see if we're already on a sub-menu-item
   * By looking in the current pages url for the string '?c=somewordhere'
   */
  var matches;
  if( matches = (new String(document.location)).match(/\?c=\w+/) ) {  
    /*
     * If we are, search the page for a link to that submenu item
     * ( by looking for the '?c=somewordhere' part in the hrefs ) 
     * and find its parent menu `ul` and show it.
     */
    $("a[href=" + matches[0] + "]").parents("ul").toggle(); 
  }

}); # End Document Ready Scoping. 

Для ясности,

jQuery(function($){ 

}); 

Это очень удобная сокращенная запись, которая очень мощная. Это эквивалентно выполнению

jQuery(document).ready(function($){ 

});

Что, в свою очередь, почти эквивалентно действию

jQuery(document).ready(function(){ 
     var $ = jQuery; 
});

Что гарантирует отказоустойчивым способом, что "$" будет jQuery внутри этой функции независимо от всего остального на странице.

0 голосов
/ 29 марта 2009

Я предлагаю использовать действительно простую историю . Он позволяет прозрачно сохранять состояние между вызовами страницы (не нужно связываться с файлами cookie, URL-адресами и т. Д.)

Вы также можете использовать Ajax для своего сайта, но если вы хотите, чтобы кнопка «Назад» работала, вы все равно использовали бы что-то вроде RSH. =]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...