Hello again, I've been continuing my search and it seems that the .each function is not working the way I wanted it to...

From what I've understood $(".item").each(function(){}) just counts how many elements have the 'item' class, and then executes the code that number of times with $(this) being the same as $(".item").

How would I go about running a function on each element ? would I have to do something with a counter an the next function to achieve this ? or is there an easier way ?

Thankyou.

Jsbeginner wrote :

Hello,

I've been struggling with a very simple code that I can't get to work ...

Simplified html :

<ul>
   <li>
       <p>Item 1<p>
       <p class="toggle">Hidden contents 1</p>
       <p><a href="#" class="down">Click to show</a></p>
   </li>
   <li>
       <p>Item 2<p>
       <p class="toggle">Hidden contents 2</p>
       <p><a href="#" class="down">Click to show</a></p>
   </li>
   <li>
       <p>Item 3<p>
       <p class="toggle">Hidden contents 3</p>
       <p><a href="#" class="down">Click to show</a></p>
   </li>
</ul>

This is what I want to do :

When you click on a Click to show link it shows the hidden contents contained in the item's "toggle" paragraphe and changes the link text to "Click to hide". I also want to only be able to have one hidden contents showing at a time, so I would like to be able to hide any other visible hidden contents before showing the hidden contents asked for.

I know my code isn't perfect but the following code works to some extent : I can show or hide the contents but not hide all other contents before showing new contents.
--------------------------
function down() {
   $("a.down").each(function(){
       $(this).click(function(){
           reinit();
           $(this).parent("p").prev("p").slideDown(300);
$(this).parent("p").html("<a href=\"#\" class=\"up\">Click to hide</a>");
           up();
           return false;
       });
        });
}

function up() {
   $("a.up").each(function(){
       $(this).click(function(){
           $(this).parent("p").prev("p").slideUp(300);
$(this).parent("p").html("<a href=\"#\" class=\"down\">Click to show</a>");
           down();
           return false;
       });
        });
}

function reinit(){
   $(".toggle").each(function(){
       $(this).slideUp(300);
$(this).next("p").html("<a href=\"#\" class=\"down\">Click to show</a>");
   });
  }

$(document).ready(function(){
   down();
});
--------------------------

There is just one line that doesn't work it's in the reinit function :

$(this).next("p").html("<a href=\"#\" class=\"down\">Click to show</a>");

I've been trying lots of ways to get this working without success... I thought it would work with the next function but no luck.

If it will help you to find what I've done wrong I've put all the necessary code (except the jquery library) in one html file, I've not added it to this help request to not make it too long, but if you find it difficult to follow me I can post it's contents so you can test it.

Thankyou.









Reply via email to