Link to home
Start Free TrialLog in
Avatar of birwin
birwinFlag for Canada

asked on

jquery expanding div problem

I have an expending div, using jQuery. When you hover over the div (which holds an image) it expands to show some instructional text.

The problem is, that if you exit by moving your mouse down over the newly exposed text and out of the expanded area, it doesn't collapse. If I move the mouse out of the original image throught the top or sides, it collapses nicely, but if I move the mouse down, or to the left or right of the newly exposed text, it doesn't collapse.

Any idea what I am doing wrong?

Here is the jQuery

<script type="text/javascript">
 
                        $(document).ready(function(){
 
                                $("#expanderInst").hover(
                                        //function on mouse over
                                        function(){
                                                $(this)
                                                        .stop()
                                                        .animate({height : "150px", width : "285px"},400);
                                        },
 
                                        //function on mouse out
                                        function(){
                                                $(this)
                                                        .stop()
                                                        .animate({"height" : "85px", width : "285px"}, 400);
 
                                        }
                                );

                        });
 
                </script>

Here is the inline code

 <div id="expansion_wrapper2" > 
<div id="expanderInst" style="height: 85px; background: #fff; background-image: url(images/box_background_5.jpg);border: 4px solid #8CB8DB; overflow-y: hidden; overflow-x: hidden; width:285px;  4px; text-algin:left;  "  ><center>

<img id="imageidInst" src="http://www.somesite.com/images/slider_help_cover.jpg" width="285" height="85" style="  " /><br clear="all"><div style="padding: 8px;"><span style='font-size: 14px; font-style:normal'>Use the sliders below to reveal your best choice</span>.</div> <br>

</div><!--- expanderInst --->

                </div><br clear="all"> <!--- expansion_wrapper --->
Avatar of Justin Mathews
Justin Mathews

You have an extra </div> closing tag. Cleaned up as below. Modified JS is attached:

div id="expansion_wrapper2" > 
<div id="expanderInst" style="height: 85px; background: #fff; background-image: url(images/box_background_5.jpg);border: 4px solid #8CB8DB; overflow-y: hidden; overflow-x: hidden; width:285px;  4px; text-algin:left;  "  ><center>

<img id="imageidInst" src="http://www.somesite.com/images/slider_help_cover.jpg" width="285" height="85" style="  " /><br clear="all"><div style="padding: 8px;"><span style='font-size: 14px; font-style:normal'>Use the sliders below to reveal your best choice</span>.<br>

</div><!--- expanderInst --->
</div><br clear="all"> <!--- expansion_wrapper --->
<script type="text/javascript"> 
 
$(document).ready(function(){ 

        $("#expansion_wrapper2").hover( 
                //function on mouse over 
                function(){ 
                        $('#expanderInst') 
                                .stop() 
                                .animate({height : "150px"},400); 
                }, 

                //function on mouse out 
                function(){ 
                        $('#expanderInst') 
                                .stop() 
                                .animate({"height" : "85px"}, 400); 

                } 
        ); 

}); 

</script>

Open in new window

Discard my previous post. There was no extra </div>. I cleaned up the code a bit. See below:
<script type="text/javascript"> 
 
$(document).ready(function(){ 

        $("#expanderInst *").hover( 
                //function on mouse over 
                function(){ 
                        $('#expanderInst') 
                                .stop() 
                                .animate({height : "150px"},400); 
                }, 

                //function on mouse out 
                function(){ 
                        $('#expanderInst') 
                                .stop() 
                                .animate({"height" : "85px"}, 400); 

                } 
        ); 

}); 

</script>
<center>
<div id="expansion_wrapper2"> 
<div id="expanderInst" style="height: 85px; background: #fff; background-image: url(images/box_background_5.jpg);border: 4px solid #8CB8DB; overflow: hidden; width:285px;  4px; text-align:left;  "  >
<img id="imageidInst" src="http://www.somesite.com/images/slider_help_cover.jpg" style="height: 85px; width:285px;" />
<div style="padding: 8px;">
<span style='font-size: 14px; font-style:normal'>Use the sliders below to reveal your best choice</span>
</div>
</div><!--- expanderInst --->

</div><!--- expansion_wrapper --->
</center>

Open in new window

Avatar of birwin

ASKER

Hi jmatix:

Thank you for the code. It seems to be much better at recognizing the mouse out, and collapses if the mouse is moved right or left from anywhere on the expanded content. It is hit and miss when the mouse is pulled strait down, but collapses immediately if the mouse is pulled from the parent element (which is a <td>

The problem is that if the mouse is placed on the area into which the div expands, it expands the div - even if the mouse hasn't touched the original, smaller div. Therefore it is unusable, since there is copy and checkboxes that are covered as soon as the mouse strays into the area that the expanded div eventually will cover.

Do you any ideas on how to prevent that?

Thanks

Brian
I removed the wrapper <div>. See if it is better. In IE the image shivers a bit when you approach it from below. I don't know why.


<script type="text/javascript" src="../JS/jquery.js"></script>
<script type="text/javascript"> 
 
$(document).ready(function(){ 

        $("#expanderInst").hover( 
                //function on mouse over 
                function(){ 
                        $('#expanderInst') 
                                .stop() 
                                .animate({height : "150px"},400); 
                }, 

                //function on mouse out 
                function(){ 
                        $('#expanderInst') 
                                .stop() 
                                .animate({"height" : "85px"}, 400); 

                } 
        ); 

}); 

</script>
<center>
<div id="expanderInst" style="height: 85px; background: #fff; background-image: url(images/box_background_5.jpg);border: 4px solid #8CB8DB; overflow: hidden; width:285px;  4px; text-align:left;  "  >
<img id="imageidInst" src="../images/Waterlilies.jpg" style="height: 85px; width:285px;" />
<div style="padding: 8px;">
<span style='font-size: 14px; font-style:normal'>Use the sliders below to reveal your best choice</span>
</div>
</div><!--- expanderInst --->

</center>

Open in new window

Avatar of birwin

ASKER

Thank you for the code.

I tried it in my "real life" site, and this code does collapse when the mouse is dragged down, but it now pushes down all of the other elemenets on the page when it opens. I was hoping that it would overlay the existing elements, as it did previously.
ASKER CERTIFIED SOLUTION
Avatar of Sudaraka Wijesinghe
Sudaraka Wijesinghe
Flag of Sri Lanka image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of birwin

ASKER

Thank you. That worked perfectly.
Glad to help. Thanks for the points.