That won't work, it makes both buttons disappear and reappear instead of the
effect I want which is to make the hover button appear when the mouse is in
and disappear when the mouse is out.

 

From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Brandon Aaron
Sent: Wednesday, July 25, 2007 5:17 PM
To: jquery-en@googlegroups.com
Subject: [jQuery] Re: Toggling an objects visiblty without show and hide

 

The hover method takes two functions. One for the mouseover and one for the
mouseout. Here are the docs for the hover method:
http://jquery.bassistance.de/api-browser/#hoverFunctionFunction 

Here is the proper way to code the example.

$("#showPic").hover(function() {
    $("#hover, #normal").addClass("hidden");
}, function() {
    $("#hover, #normal").removeClass("hidden");
}); 

--
Brandon Aaron

On 7/25/07, Mitchell Waite <[EMAIL PROTECTED]> wrote:

Leave it to Michael to leave the most indelible mark. I now a see the subtle
issues with "this" In fact I have a whole a new take on jQuery since
listening to Michael about "this" and trying to get my tediously simple
little toggle to work. 

 

It actually started in Javascript and was a lot more code, so I appreciate
that it's so more streamlined. 

 

However the abstraction leaves me a bit uneasy. Given there is no simple way
to tell a DOM "this" from a jQ "this", I ended up doing this:

 

 

/* from Rob */

function toggleVis(element) { 

    if (element.style.visibility == 'hidden') {  

        element.style.visibility = 'visible'; 

    } else { 

        element.style.visibility = 'hidden'; 

    } 

} 

 

Contrasting this with Michael G's code

 

   jQuery.fn.toggleVis = function() {

      return this.each( function( index, element ) {

         if (element.style.visibility == 'hidden') {

            element.style.visibility = 'visible';

         } else {

            element.style.visibility = 'hidden';

         }

      });

   };

 

I think Rob's makes more sense to a beginner. 

 

---- called by this----

 

         $("#toggle").click(function() { 

              var $cat = $('#cheshireCat');  

              if ($cat.length) { 

                     toggleVis($cat[0]); 

       } 

          });

 

This was advice from Rob, using a JS function and calling it with from
jQuery and sending it a DOM. I leave this here for the newbie's on this
list, as I know this is self evident to most people here.  

 

Now to muddle things either further.

 

I decided that I might be able to use jQuery's 'hover' to deal with the
whole issue of flipping visibility and so I made this:

 

.hidden {display: none;}

 

.showPic {

       position:absolute;

       width:94px;

       height:31px;

       z-index:1;

}

 

</style>

 

<script type="text/javascript">

$(document).ready(function(){

 

       $("#showPic").hover(function() {

              $("#hover, #normal").toggleClass("hidden");

        }); 

 

});  

 

 </script>

</head>

 

<body>

<div id="showPic"><img id="hover" src="images/B_hover.gif" class="hidden" />

<img id="normal" src="images/b_normal.gif" />

</div>

 

</body>

</html>

 

Ya think that could be more simple. It works right?

 

Check it out, it does something much different then what I expected.

 

http://www.whatbird.com/wwwroot/3statebutton_2.html

 

So is hover not a good solution?

 

Mitch

 

-----Original Message-----
From: jquery-en@googlegroups.com [mailto:
<mailto:jquery-en@googlegroups.com>  [EMAIL PROTECTED] On Behalf
Of Michael Geary
Sent: Wednesday, July 25, 2007 10:10 AM
To: jquery-en@googlegroups.com
Subject: [jQuery] Re: Toggling an objects visiblty without show and hide

 

 

Rob, I think you left out the return statement that you meant to put in. :-)

 

(Outstanding explanation, BTW!)

 

For clarity, it could be:

 

   jQuery.fn.toggleVis = function() {

      this.each(function() {

         if (this.style.visibility == 'hidden') {

            this.style.visibility = 'visible';

         } else {

            this.style.visibility = 'hidden';

         }

      });

      return this;

   };

 

 

 

Reply via email to