2013-06-25 51 views
0

首先,我想为我的糟糕英语道歉。 在这个代码块:jquery - 阻止执行jquery块中的下一行代码

$("#div1").mouseleave(function(){ 
      $("#div2").mouseenter(function(){ 
       //To prevent hiding div2 
      }); 
      $("#div2").hide(); 
    }); 

正如你看到的我想阻止执行$("#div2").hide();如果光标DIV2输入。

谢谢。

+2

不知道你要在这里实现什么,ü可以更具体 – dreamweiver

+0

尝试检查#div2'是否'是'事件的relatedTarget':http://api.jquery.com/event.relatedTarget/ – CBroe

回答

0

一个可行的办法是通过一些像毫秒100,如果鼠标进入div2在其中取消隐藏操作

var div2HideTimer; 
$("#div1").mouseleave(function(){ 
    div2HideTimer = setTimeout(function(){ 
     $("#div2").hide(); 
    }, 100) 
}); 
$("#div2").mouseenter(function(){ 
    clearTimeout(div2HideTimer) 
}); 
+0

谢谢亲爱的Arun P Johny!你的代码工作。干杯。 –

+0

@ user1425882 [你应该接受这个答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。这将标志着问题解决。 –

1

如果我得到你的问题,你不想隐藏div2,如果离开div1时,鼠标立即进入div2或保持在div2中。

然后,你可以这样做:

// returns true if the event is over the jQuery object o 
function eventIsOver(event, o) { 
    if ((!o) || o==null) return false; 
    var pos = o.offset(); 
    var ex = event.pageX; 
    var ey = event.pageY; 
    return (
     ex>=pos.left 
     && ex<=pos.left+o.width() 
     && ey>=pos.top 
     && ey<pos.top+o.height() 
    ); 
}; 

$("#div1").mouseleave(function(e){ 
      if (eventIsOver(e, $("#div2")) return; 
      $("#div2").hide(); 
}); 

请注意,根据您的具体情况,你可能需要做不同的事情。例如,如果两个div之间可能存在差距(那么您必须处理延迟),或者如果其中一个比另一个更重要,那么您没有精确。

1

能否请您试试这个拖延的div隐藏。我希望这是你所期望的。否则,让我知道你想要什么。

 $("#div1").mouseleave(function(){ 
     $("#div2").mouseenter(function(){ 
      //To prevent hiding div2 
     }); 
     if(!$("#div2").mouseenter()){ 
     $("#div2").hide(); 
     } 
    });