views:

39

answers:

1

here is my complete code when i mouse over on popupcontact div it show the divtoshow div over it and it has one link of name rahul when i mouse over the link it hide the div name divtoshow. my div should hide when i mouseout not when i mouseover the link. please help asap.

regards rahul

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script>
</head>
<body>
    <div id="popupContact"  style="position:absolute;left:100px;top:100px;width:100px;height:50px;background-color:orange;border:1px solid red ;">
    </div>
    <div id="divtoshow" style="display:none;background-color:green; border:1px solid black;width:200px;height:100px;position:absolute;">
    dsfdssd <div><a href="#">rahul</a></div>
    </div>
</body>
</html>
<script  type='text/javascript'>
$(document).ready(function(){
    var popup_pos=$('#popupContact').offset();
    var timer;
     $("#popupContact").mouseover(function() {
        if(timer) {
            clearTimeout(timer);
            timer = null
           }
        timer = setTimeout(function() {
            console.log($("#VersionSelectField").is(':hidden'));
            if(!$("#VersionSelectField").is(':hidden')){
                $("#divtoshow").css('position',"absolute"); 
                $("#divtoshow").css('top',popup_pos.top-20);    
                $("#divtoshow").css('left',popup_pos.left-20);  
                $("#divtoshow").fadeIn(300);
                 $("#popupContact").hide();
            }

        }, 100);

        });

     $("#divtoshow").mouseout(function() {
            if(timer) {
                clearTimeout(timer);
                timer = null
               }
            timer = setTimeout(function() {
                $("#divtoshow").fadeOut("slow");
                 $("#popupContact").show();

            }, 1000);
    });
});
</script>
+1  A: 

Instead of .mouseout() like this:

$("#divtoshow").mouseout(function() {

Use .mouseleave(), like this:

$("#divtoshow").mouseleave(function() {

This won't fire when entering a child element like mouseout will, which is currently hiding when you don't want it to.


One other code tip, you can at least chain on the #divtoshow selector, or even better chain and pass an object to .css(), like this:

$("#divtoshow").css({ position: "absolute", 
                      top: popup_pos.top-20, 
                      left: popup_pos.left-20 })
               .fadeIn(300);

Also, it's not an issue for your markup, but if #popupContact had a child element you'd have similar issues with mouseover, that not-firing-on-children equivalent is mouseenter.

Nick Craver
Thanks Nick it worked
Rahul Mehta
@Rahul - Welcome :) Be sure to accept answers if they resolve your issue :)
Nick Craver