Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery Show/Hide by class when multiple items contain the said class

Thanks in advance for helping me out (for those who have time and are willing).

I've written this script:

$(document).ready(function() {
  // hides the slickbox as soon as the DOM is ready
  // (a little sooner than page load)
  $('.foliobtn').hide();
  $('.folionamedate').show();

  // shows the slickbox on clicking the noted link
  $('.foliobottom').mouseover(function() {
    $('.foliobtn').show();
    return false;
  });
  $('.foliobottom').mouseout(function() {
    $('.foliobtn').hide();
    return false;
  });
  $('.foliobottom').mouseover(function() {
    $('.folionamedate').hide();
    return false;
  });
  $('.foliobottom').mouseout(function() {
    $('.folionamedate').show();
    return false;
  });
});

and put it onto this page http://www.fraservalley-webdesign.com/portfolio/test.php.

It works except it of course shows/hides on every element with the appropriate classes, not just the one I'm hovering over. I can't uniquely name each one as there will be dozens and it will be database driven content.

Does anyone know a simple way to isolate the item I'm hovering over within the script?

Does this make sense?

like image 273
Ben Stewart Avatar asked Dec 18 '09 23:12

Ben Stewart


2 Answers

The variable "this" is bound to the triggering element in the mouseover and mouseout handlers, so you can say something like

$('.foliobtn',this).hide();

to hide the elements with class "foliobtn" inside the triggering element.

like image 98
Rich Avatar answered Oct 27 '22 00:10

Rich


You can use another function as a callback, this would effectively act as a toggle of sorts, and make your code simpler.

Give this a shot:

$(document).ready(function() {

  // hides the slickbox as soon as the DOM is ready
  // (a little sooner than page load)
  $('.foliobtn').hide();
  $('.folionamedate').show();

  // shows the slickbox on clicking the noted link
  $('.foliobottom').hover(function() {
    $(this).find('.foliobtn').show();
  }, function() {
    $(this).find('.foliobtn').hide();
  });

});

You also don't need to return false in this case because the browser has no default behavior for this element.

return false is more appropriate for something like click for an <a> or a form submit, but really you'd probably want to use preventDefault() instead.

like image 39
JP Silvashy Avatar answered Oct 26 '22 23:10

JP Silvashy