Autor Zpráva
buddy
Profil *
Zdarvím,

řeším tu takovou zapeklitost. Chci zobrazovat a skrývat více (celkový počet je neznámý) objektů na stránce pomocí funkce toggle v jQuery. Taky by si stránky měly poslední stav pamatovat. Začal jsem nejdřív s jedním prvkem a to šlo bez problémů:

  <style>
      .hidden {display: none;}
  </style>
  
  <script type="text/javascript">
  $(document).ready(function(){
  
  var kolacek = $.cookie('show');    
      
  if (kolacek == 'block') {
            $("#show").show();                         
            $("#show").removeClass("hidden");
    };
  
  $("#show_link").click(function(){
  
  if ($("#show").is(":visible")) {
  $.cookie('show', 'none');
  } else {
  $.cookie('show', 'block');
  }
  
    $("#show").slideToggle("500");
    return false;
  });
});
  
  
  </script>
  
  <a href="#show" id="show_link">Zobraz</a>

  <div id="show" class="hidden">
    TEST
  </div>


Je to sesmolený na rychlo, ale snad je to ok. Funguje to v pohodě. Problém je, že když budu chtít takto skrývat a zobrazovat víc prvků, tak nevím, jak postupovat. Normálně bych to řešil asi přes onclick(i), kde i by bylo číslo za id zobrazované části... Takže onclick(1) by zobrazovalo show_1 a podobně... U jQuery nevím jak na to. Důležitý je, aby to fungovalo s cookies a aby to dokázalo takhle zobrazovat "nekonečnej" počet prvků. Nenapadá vás něco, neřešili jste někdy něco podobného? Tohle je moje první "dílo" v jQuery, dřív jsem si všecko psal sám a zatím se tak nějak rozkoukávám... :)
buddy
Profil *
Tak jsem trošku pošpekuloval a došel jsem na řešení, které mi zobrazuje více divů:

<script type="text/javascript">
  $(document).ready(function(){


$('[class^=toggle-cont]').hide();
$('[class^=show]').click(function() {
var $this = $(this);
var x = $this.attr("className");

if ($('.toggle-cont' + x).is(":visible")) {
  $.cookie(x, 'none');
  } else {
  $.cookie(x, 'block');
  }

$('.toggle-cont-' + x).toggle(500);
return false;
});
});

</script>
  
  <a href="#show_menu1" class="show_menu1">Zobraz 1</a>

  <div class="toggle-cont-show_menu1">
    TEST 1
  </div>
  
  <a href="#show_menu2" class="show_menu2">Zobraz 2</a>

  <div class="toggle-cont-show_menu2">
    TEST 2
  </div>


Teď do toho ještě zabudovat ty kolacky a je to. Akorát teď nevím, jak na ně. Jestli přes nějakej cykl projet všechny cookies začínající show_ nebo tak něco. Ono by se to dalo jednoduše řešit i přes php, prostě tam nacpat výsledek toho cookie, ale to mi nepřijde moc elegantní a radši bych to měl jen v JS... Jdu experimentovat dál, ale kdyby měl někdo nápad, určitě budu rád..
buddy
Profil *
Hehe, jsem trubka. Já to řešení v podstatě vymyslel už v tom druhým příspěvku, stačilo ho jen trochu přespat na cookies a bylo hotovo. Kdyby někdo řešil něco podobnýho, nechť je mu k dispozici následující řešení (možná existuje něco jednoduššího a lepšího, ale já na nic nenarazil a to moje je myslím ok):

  <script type="text/javascript">
  $(document).ready(function(){
  
$('[class^=toggle-cont]').hide();

$('[class^=show]').each(function (i) {
var $this = $(this);
var y = $this.attr("className");

var kolacek = $.cookie(y);    
      
  if (kolacek == 'block') {
            $('.toggle-cont-' + y).show();                         
            
    };

      });


$('[class^=show]').click(function() {
var $this = $(this);
var x = $this.attr("className");

if ($('.toggle-cont-' + x).is(":visible")) {
  $.cookie(x, 'none');
  } else {
  $.cookie(x, 'block');
  }

$('.toggle-cont-' + x).toggle(700);
return false;
});
});
  
  </script>
  
  <a href="#show_menu1" class="show_menu1">Zobraz 1</a>

  <div class="toggle-cont-show_menu1">
    TEST 1
  </div>
  
  <a href="#show_menu2" class="show_menu2">Zobraz 2</a>

  <div class="toggle-cont-show_menu2">
    TEST 2
  </div>


Ještě si s tím doma pohraju a poladím to, ale důležitý je, že se zadařilo.

No nic, tak jsem si tu zakonverzoval sám se sebou a je na čase vrátit se do práce...
kahi
Profil
Sice to už máš vyřešené, ale pro zajímavost, řešil jsem to samé takto (a je tam ještě prostor ke zlepšení).
buddy
Profil *
kahi
Jojo, na tohle jsem narazil a chvilku jsem si s tím hrál, nakonec jsem ale potřeboval, aby trošku něco jinýho a tak jsem vypotil to svoje. Bude se to ještě dost měnit, aby to vyhovovalo tomu, k čemu to bude sloužit... Každopádně díky za radu.

Mimochodem jsem narazil na ještě jeden zajímavej skript... pro moje účely sice nepoužitelný, ale jinak určitě stojí za okouknutí: Tady...
kahi
Profil
Mimochodem jsem narazil na ještě jeden zajímavej skript... pro moje účely sice nepoužitelný, ale jinak určitě stojí za okouknutí: Tady...
Dá se v tom inspirovat, díky!

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: