Jquery mouseenter()vs mouseover()

azi*_*ani 166 jquery dom-events

所以阅读最近回答后,问题我很清楚,如果我真的明白之间的差别mouseenter()mouseover().帖子说

鼠标移到():

进入元素时以及元素内发生任何鼠标移动时将触发.

的MouseEnter():

进入元素时会触发.

我想出了一个使用两者的小提琴,它们看起来非常相似.有人可以向我解释两者之间的区别吗?

我也尝试过阅读JQuery定义,两者都说同样的事情.

当鼠标指针进入元素时,鼠标悬停事件将发送到元素

当鼠标指针进入元素时,mouseenter事件将发送到元素.

有人可以用一个例子来澄清吗?

gil*_*ly3 265

您可以看到目标元素包含子元素时的行为:

http://jsfiddle.net/ZCWvJ/7/

每次鼠标进入或离开子元素时,mouseover都会触发,但不会触发mouseenter.

$('#my_div').bind("mouseover mouseenter", function(e) {
  var el = $("#" + e.type);
  var n = +el.text();
  el.text(++n);
});
Run Code Online (Sandbox Code Playgroud)
#my_div {
  padding: 0 20px 20px 0;
  background-color: #eee;
  margin-bottom: 10px;
  width: 90px;
  overflow: hidden;
}

#my_div>div {
  float: left;
  margin: 20px 0 0 20px;
  height: 25px;
  width: 25px;
  background-color: #aaa;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<div>MouseEnter: <span id="mouseenter">0</span></div>
<div>MouseOver: <span id="mouseover">0</span></div>

<div id="my_div">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 简短而精确 (5认同)
  • @FredrickGauss - 我正在使用`+`运算符将`el.text()`返回的字符串强制转换为数字.我*需要*吗?在这种情况下,使用`n`的下一个语句也会将其强制转换为数字.所以,*为什么*我使用它?我不确定......这是2年前的事了.这是一个好习惯.它使我的意图明确.在我保存之前,我原本可能有'n + 1`,但我决定用2个字符缩小我的代码并只使用`++ n`.`n + 1`会*不会*强制`n`到一个数字,而是强制`1`到一个字符串,导致输出,例如`0111111`. (3认同)
  • @psychobrm - 没有.玩这两个跟踪'mouseleave`事件的演示:http://jsfiddle.net/ZCWvJ/232/ http://jsfiddle.net/ZCWvJ/233/如果超过与输入相同的地方+离开,然后计数结束将是进入和离开计数的总和. (2认同)
  • @ gilly3 - 感谢您详细解释您的旅行. (2认同)

Chr*_*her 27

这是我发现的最好的例子之一:

  • 的mouseenter
  • 鼠标移到
  • 鼠标移开
  • 鼠标离开

http://bl.ocks.org/mbostock/5247027


Eri*_*est 12

但是,虽然它们以相同的方式运行,但mouseenter只有当鼠标指针进入所选元素时才会触发事件.如果鼠标指针也进入任何子元素,mouseover则会触发该事件.