我在元素上定义了mouseenter
和mouseleave
事件,并且我在同一元素上定义了click
事件。现在当我在元素上click
并将光标移离元素时,首先触发click
事件,然后触发mouseleave
事件,但我想延迟click
事件直到mouseleave
事件结束。我怎么能这样做?
我的代码:
$("#ele").mouseenter( function(){
$('#ele').text('onMouseEnter');
});
$("#ele").click( function(e){
e.preventDefault();
$('#ele').text('onClick');
});
$("#ele").mouseleave( function(){
$('#ele').text('onMouseLeave');
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='ele'>
Testing...
</div>
&#13;
修改:
请不要在click
事件中建议包含部分mouseleave
事件代码的解决方案,因为我还在窗口调整大小时手动触发click
事件。哪个不会执行click
事件中属于mouseleave
事件代码的部分。
答案 0 :(得分:1)
您可以使用标记检查是否单击了该元素,如果单击该元素,则将该标志设置为true。现在在mouseleave中检查标志是否为true,如果为true则执行click函数。
见下文。
var isClicked = false;
function onClickDelayed() {
$('#ele').text('onClick');
}
$("#ele").mouseenter(function() {
$('#ele').text('onMouseEnter');
});
$("#ele").click(function(e) {
isClicked = true;
});
$("#ele").mouseleave(function() {
$('#ele').text('onMouseLeave');
if (isClicked)
onClickDelayed();
isClicked = false;
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='ele'>
Testing...
</div>
&#13;
答案 1 :(得分:0)
我想到的是你可以做一些变量,比如:
mouseHit = false;
$("#ele").click( function(e){
e.preventDefault();
mouseHit = true;
});
$("#ele").mouseleave( function(){
$('#ele').text('onMouseLeave');
if (mouseHit) {
$('#ele').text('onClick');
mouseHit = !mouseHit;
}
});
在这种情况下,您的变量负责确保触发了之前的点击事件,但您在mouseleave事件中执行了实际操作。