为了账号安全,请及时绑定邮箱和手机立即绑定

关于hover事件的问题

官方不是把hover事件hover,out事件功能取消了么,为啥这里还用这个功能,详情请看http://www.css88.com/jqapi-1.9/hover/

正在回答

2 回答

就jQuery 官方的文档而言,并没有说remove hover() 这个事件,只是说明它不再是"mouseenter"和"mouseleave" 的代名词。(见http://jquery.com/upgrade-guide/1.9/#quot-hover-quot-pseudo-event)

Demo1:     $(XX).hover(function(){})

tip:切换 <head> 元素里的注释查看不同版的jQuery 下的效果。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQurey 1.9 - hover</title>
 <!-- <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js" type="text/javascript"></script> -->
<script src="http://lib.sinaapp.com/js/jquery/1.8/jquery.min.js" type="text/javascript"></script>
<style>
ul { margin-left:20px; color:blue; }
li { cursor:default; }
span { color:red; }
</style>
</head> 
<body>
<ul>
<li>Milk</li>
<li>Bread</li>
<li>Chips</li>
<li>Socks</li>
</ul>
<script>
$(function() {
$("li").hover(
function (evt) {
console.log(evt.type);
$(this).append($("<span> ***</span>"));
},
function (evt) {
console.log(evt.type);
$(this).find("span:last").remove();
}
);
$("li.fade").hover(function(){
console.log("fadeOut");
$(this).fadeOut(100);
console.log("fadeIn");
$(this).fadeIn(500);
});
});
</script>
</body>
</html>

Demo2:    1.8的delegate$(xx).delegate()方式

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQurey 1.9 - hover</title>
<script src="http://lib.sinaapp.com/js/jquery/1.8/jquery.min.js" type="text/javascript"></script>
<style>
ul { margin-left:20px; color:blue; }
li { cursor:default; }
span { color:red; }
</style>
</head> 
<body>
<ul>
<li>Milk</li>
<li>Bread</li>
<li>Chips</li>
<li>Socks</li>
</ul>
<script>
$(function() {
var onHover = function(evt){
console.log(evt.type);
if(evt.type == "mouseenter"){
$(this).append($("<span> ***</span>"));
}else{
$(this).find("span:last").remove();
}
};
$('ul').delegate('li','hover', onHover)
});
</script>
</body>
</html>

Demo3:    1.9.1的delegate$(xx).delegate()方式

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQurey 1.9 - hover</title>
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js" type="text/javascript"></script>
<style>
ul { margin-left:20px; color:blue; }
li { cursor:default; }
span { color:red; }
</style>
</head> 
<body>
<ul>
<li>Milk</li>
<li>Bread</li>
<li>Chips</li>
<li>Socks</li>
</ul>
<script>
$(function() {
var onHover = function(evt){
console.log(evt.type);
if(evt.type == "mouseenter"){
$(this).append($("<span> ***</span>"));
}else{
$(this).find("span:last").remove();
}
};
$('ul').delegate('li','hover', onHover)
});
</script>
</body>
</html>

可见 - 在1.9版使用 .hover() 事件没不会出错或没有响应,而如果你希望使用 on,delegeta 则是不可能的。

我追溯了一下源码,使用的分别是1.11.2 和 1.8 版

就.hover() 事件而言,源码一致,这也可以解释了在你直接使用 .hover() 事件时,两个版本并不会出现不同。

5526587e0001a39705000270.jpg

5526587e0001fe5a05000239.jpg

那到底为什么在1.9 版及以上使用 delegate,on 等绑定方法不行呢?问题就在于你提出来的,官方对 "hover" 这个String ,做了修改。

link"hover" pseudo-event

As of 1.9, the event name string "hover" is no longer supported as a synonym for "mouseenter mouseleave". This allows applications to attach and trigger a custom "hover" event. Changing existing code is a simple find/replace, and the "hover" pseudo-event is also supported in the jQuery Migrate plugin to simplify migration.

再次回到源码,发现在1.9以下版本中,其实是jQuery 官方给出了一个Hack。(具体这个Hack 在 add event 中如何使用,请查看1.9版以下的源码)。在1.9+版本中官方删除了这个Hack。

http://img1.sycdn.imooc.com//552659870001f09710040427.jpg

总结:1.9+ 版的jQuery 并没有删除掉 .hover() 事件,只是表明其不再是单纯的 mouseenter 和 mouseleave 的代名词。

1 回复 有任何疑惑可以回复我~

哪里取消了?

0 回复 有任何疑惑可以回复我~
#1

十nian 提问者

http://www.css88.com/archives/4564 应该是这里,1.9开始不再支持mouseover和mouseout事件
2015-04-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
jQuery基础课程
  • 参与学习       154768    人
  • 解答问题       7184    个

加入课程学习,有效提高前端开发速度

进入课程

关于hover事件的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信