Search code examples
jqueryselectselectorroweach

jQuery select div in a row


I need advice on the following HTML:

<!-- Beginning of ROW !-->
<div id="row1">
 <div id="entry">
  free
  <span>some text</span>
  <p>DKK</p>
  <input type="radio" name="red<% Response.Write(counter); %>" id="radio" value="0" />
 </div>

 <div id="entry">
  week
  <span></span>
  <p>DKK</p>
  <input type="radio" name="red<% Response.Write(counter); %>" id="radio2" value="75" />
 </div>
</div>
<!-- End of ROW !-->

<!-- Beginning of ROW !-->
<div id="row2">
 .... same as in row 1
</div>
<!-- End of ROW !-->

nth row ..

Here is jQuery:

$("input").click(function() {
     $("input").parent("div").css("background", "url(images/div_bg.png)");
     $(this).parent("div").css("background", "url(images/div_bg_hover.png)");
});

What I'm trying to do: when I select a radio input the div in which it is located should change background and it works perfectly if there is only one row, but for instance if I try to select the value in first row then I select value in second row.

The div in second row where radio input is located changes background as it should but the div in first row reverse itself to other background although input remained checked. Here is what I'm trying to achieve

alt text

And here is what I achieve :

alt text


Solution

  • What is the purpose of your second line of jquery?

    $("input").parent("div").css("background", "url(images/div_bg.png)");
    

    This is going to reset the background of all the "entry" divs. If I understand your objective correctly I think you want:

    $(this).parent("div").siblings("div.entry").css("background", "url(images/div_bg.png)");
    

    That way only the siblings of the entry you are changing will get their backgrounds reset.

    On a side note, you have multiple divs with the same id, which is not a good idea.