Autor Zpráva
xciza
Profil
Ahoj,
na webu pomocí php generuju v cyklu elementy s id a pomocí js nektere schovam a po kliknuti na jeden element je chci zobrazit.
problem je v tom ze když v js napisu toto:
    $(document).ready(function() {
              for (i = 0; i < 10; i++){
                $("#forum-text-" + i).hide();
                
                $("#forum-title-" + i).click(function() {
              
                    $("#forum-text-" +i).slideToggle();
                        });
              }
            });
tak se element pouze schova.
kdyz tam ale nedam forcyklus a misto "i" dám na pevno čísla tak to jede. Nevíte proč v prvním případě to jde a u druhého ne?
Chamurappi
Profil
Reaguji na xcizu:
Nevíte proč v prvním případě to jde a u druhého ne?
Hodnota i je v době kliknutí dávno 10.
Viz Lexikální uzávěr.
xciza
Profil
Ale ta hodnota by se měla navisit o jedna az po projdutí celeho cyklu ne?
Chamurappi
Profil
Reaguji na xcizu:
Což se i děje. Myslíš, že by se s jejím navýšením mělo čekat až na to kliknutí? Tak to nefunguje. Nastavíš zpracování události a jede se hned dál … a až někdy za sto let na tu věc člověk klikne, to už i není, co bývalo za mlada, to už je 10.
xciza
Profil
Jo takhle. tak to chapu. Ale nejak se me ten uzaver nedari rozchodit.

EDIT: nevim jestli jsem to pochopil spravne ale staci za for cyklus pridat (i)

EDIT2:
tak nevim jestli to mám správně ale už mě to funguje. Mohu jen poprosit o zkontrolovani:
for( var i = 1; i< 10; i++){
  (function(i){
            $(document).ready(function() {
            
                $("#forum-text-" + i).hide();
                
                
                $("#forum-title-" + i).click(function() {
                  $("#forum-text-" + i).slideToggle();
                });
            
            });
        })(i);
            }

diky
Kubo2
Profil
xciza:
; i< 10;

Desiaty text (#forum-text-10) sa ti neskryje. Musíš to zapísať takto:
for(var i = 1; i <= 10; ++i) { ... }
anonymní
Profil *
xciza:
neee. Takhle určitě ne.

Měj jen jedno .ready, když už ho k životu utně potřebuješ.

Šlo by to udělat třeba takto:
<style>
    .js .hide {display: none}
</style>
<body>
<script>
    document.body.className = 'js';
</script>
<div class=hide onclick='show(this)'>...</div> 
<div class=hide onclick='show(this)'>...</div>
<div class=hide onclick='show(this)'>...</div>
<div class=hide onclick='show(this)'>...</div>
<script>
    function show(el) {...}

    // pokud chces nutne jQuery reseni, tak ho prilinkujes o radek vyse a:
    function show(el) {
        el.slideToggle();
    }
</script>

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: