jquery hover事件如何不冒泡?

mingfish 2010-05-25 07:38:49
每个div鼠标经过时div背景颜色变化,但不想让镶嵌的div的父div变色,如何做?
听说是什么冒泡事件,不懂。

demo:
http://skyming.13.bname.us/question/div_hover.htm


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function div_hover(){
$("div").hover(
function(){
$(this).addClass("hover");
},
function(){
$(this).removeClass("hover");
}
);
}
$(function(){
div_hover();
});
</script>
<style type="text/css">
.box1{background:green;width:400px;height:400px;}
.box2{background:yellow;width:300px;height:300px;}
.box3{background:#cc3333;width:200px;height:200px;}
.hover{background:#33cc33}
</style>
<div class="box1">
<div class="box2">
<div class="box3"></div>
</div>
</div>

...全文
967 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyzdl 2010-05-26
  • 打赏
  • 举报
回复
帮顶。。。。。
王集鹄 2010-05-26
  • 打赏
  • 举报
回复
没有嵌套关系就比较简单,可以考虑修改html和css实现。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function div_hover(){
$("div").hover(
function(){
$(this).addClass("hover");
},
function(){
$(this).removeClass("hover");
}
);
}
$(function(){
div_hover();
});
</script>
<style type="text/css">
.box1{background:green;width:400px;height:400px;position:absolute;left:0;top:0;}
.box2{background:yellow;width:300px;height:300px;position:absolute;left:0;top:0;}
.box3{background:#c33;width:200px;height:200px;position:absolute;left:0;top:0;}
.box4{background:#f0f;width:100px;height:100px;position:absolute;left:0;top:0;}
.hover{background:#33cc33}
</style>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
王集鹄 2010-05-26
  • 打赏
  • 举报
回复
思路是:记录所有被移入的元素,高亮最上层的。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function div_hover(){
var levels = {};
var min = 100, max = 0;
var change = function() {
var q = 0;
for (var p in levels) {
$(levels[p]).removeClass("hover");
q = Math.max(q, p);
}
$(levels[q]).addClass("hover");
};
var getLevel = function(element) {
var level = 0;
for (var parent = element; parent.parentNode; parent = parent.parentNode) level++;
return level;
};
$("div").hover(
function(){
levels[getLevel(this)] = this;
change();
},
function(){
delete levels[getLevel(this)];
$(this).removeClass("hover");
change();
}
);
}
$(function(){
div_hover();
});
</script>
<style type="text/css">
.box1{background:green;width:400px;height:400px;}
.box2{background:yellow;width:300px;height:300px;}
.box3{background:#c33;width:200px;height:200px;}
.box4{background:#f0f;width:100px;height:100px;}
.hover{background:#33cc33}
</style>
<div class="box1">
<div class="box2">
<div class="box3">
<div class="box4"></div>
</div>
</div>
</div>
不知道还有没有更好的方法
mingfish 2010-05-26
  • 打赏
  • 举报
回复
谢谢zswang哥,非常完美。

死神哥的代码不行,不过也谢谢了。
shan1119 2010-05-26
  • 打赏
  • 举报
回复
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function div_hover(){
$("div").hover(
function(){
$(this).addClass("hover");
if(window.event){
window.event.cancelBubble = true;
}else{
oEvent.stopPropagation();
}
},
function(){
$(this).removeClass("hover");
}
);
}
$(function(){
div_hover();
});
</script>
<style type="text/css">
.box1{background:green;width:400px;height:400px;}
.box2{background:yellow;width:300px;height:300px;}
.box3{background:#cc3333;width:200px;height:200px;}
.hover{background:#33cc33}
</style>
<div class="box1">
<div class="box2">
<div class="box3"></div>
</div>
</div>
yliu0 2010-05-26
  • 打赏
  • 举报
回复


$("p").click(function(event){
event.stopPropagation();
//blah blah
});
mingfish 2010-05-25
  • 打赏
  • 举报
回复
谢谢,但我想要的是hover效果
北京不不 2010-05-25
  • 打赏
  • 举报
回复
stopPropagation
passself 2010-05-25
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<style type="text/css">
.box1{background:green;width:400px;height:400px;}
.box2{background:yellow;width:300px;height:300px;}
.box3{background:#cc3333;width:200px;height:200px;}
.hover{background:#33cc33}
</style>
<script src="jquery-1.3.2.js"></script>
<script>
$(function(){
$("div").toggle(
function(e){
e.stopPropagation();
$(this).addClass("hover");

},
function(e){
e.stopPropagation();
$(this).removeClass("hover");

}
);
});
</script>

</head>

<body>
<div class="box1">111111
<div class="box2">222222
<div class="box3">3333333</div>
</div>
</div>
</body>
</html>


hover事件不好测,用点击比较好测
mingfish 2010-05-25
  • 打赏
  • 举报
回复
没用的

function div_hover(){
$("div").hover(
function(e){
e.stopPropagation();
$(this).addClass("hover");
},
function(e){
e.stopPropagation();
$(this).removeClass("hover");
}
);
}

lee_09 2010-05-25
  • 打赏
  • 举报
回复
在绑定的事件function中加上参数event(事件对象),然后使用event.stopPropagation()停止事件冒泡
mingfish 2010-05-25
  • 打赏
  • 举报
回复
cancelBubble()也没用
meible2007 2010-05-25
  • 打赏
  • 举报
回复
有意思的题目,没遇见过,等待牛人,关注ing
robin_hood2012 2010-05-25
  • 打赏
  • 举报
回复
这得分浏览器,不同的浏览器不一样
toury 2010-05-25
  • 打赏
  • 举报
回复
查cancelBubble()
第1章 第一个简单的jQuery程序 jQuery事件的链式写法 控制jQuery对象 jQuery控制CSS样式 第2章 使用JavaScript实现隔行变色 使用jQuery选择器实现隔行变色 JavaScript代码检测页面元素 jQuery代码检测页面元素 使用jQuery基本选择器 使用jQuery层次选择器 使用jQuery基本过滤选择器 使用jQuery内容过滤选择器 使用jQuery可见性过滤选择器 使用jQuery属性过滤选择器 使用jQuery子元素过滤选择器 使用jQuery表单对象属性过滤选择器 使用jQuery表单过滤选择器 第3章 DOM树状文档 获取元素的属性 设置元素的属性 设置元素的属性 获取或设置元素的内容 获取或设置元素的值 直接设置元素样式值 增加CSS类别 类别切换 动态创建节点元素 动态插入节点方法 动态插入节点方法 复制元素节点 替换元素节点 包裹元素节点 遍历元素 删除元素 数据管理 第4章 事件中的冒泡现象 bind方法绑定事件 映射方式绑定不同的事件 切换事件hover 切换事件toggle 移除事件unbind 其他事件one 其他事件trigger 文本框中的事件应用 列表框中事件应用 列表中的导航菜单应用 网页选项卡应用 删除记录时的提示效果 第5章 show()与hide()方法 动画效果的show()与hide()方法 toggle()方法 slideDown()与slideUp()方法 slideToggle()方法 fadeIn()和fadeOut()方法 fadeTo()方法 简单的动画 移动位置的动画 队列中的动画 动画停止和延时 动画方式浏览图片 第6章 传统的JavaScript方法实现Ajax功能 load()方法实现Ajax功能 getJSON函数获取数据 getScript函数获取数据 get实现异步获取xml文档数据 $.get发送请求 $.post发送请求 serialize()序列化表单 $.ajax()方法发送请求 第7章 validate验证插件 form表单插件 cookie插件 autocomplete插件 notesforlightbox插件 ContextMenu插件 JQZoom放大镜插件 编写一个对象级别的插件 编写一个类级别的插件 uploadify文件上传插件 第8章 使用draggable插件实现对象的拖曳操作 使用droppable插件实现对象的置放操作 使用sortable插件实现列表中表项的拖曳排序操作 使用accordion插件实现区域块的折叠操作 使用datepicker插件实现选择日期的操作一 使用datepicker插件实现选择日期的操作二 使用tabs插件展示选项卡的基本功能 使用dialog插件弹出提示和确定信息对话框 使用jQuery UI插件以拖动方式管理相册 第9章 使用browser对象获取浏览器信息 使用boxModel对象检测是否是W3C盒子模型 使用$.each()工具函数遍历数组 使用$.each()工具函数遍历ajaxSettings对象 使用$.grep()工具函数筛选数组中的元素 使用$.map()工具函数变更数组中的元素 使用$.inArray()工具函数搜索数组中指定元素的位置 使用$.trim()工具函数除掉字符串的空格符 使用$.isEmptyObject()函数检测对象是否为空 使用$.isPlainObject()函数检测对象是否为原始对象 使用$.contains()函数检测两个节点是否包含 使用$.param()进行数组元素序列化 使用函数$.extend()扩展工具函数 使用函数$.proxy()改变事件函数的作用域 使用jQuery扩展工具函数实现对字符串指定类型的检测< 第10章 在指定的查找范围内获取DOM元素 选择器中含有空格符与不含空格符的区别 事件中的target方法优化冒泡现象 使用data()方法在元素上存取移数据 使用data()方法在元素上存取移JSON格式的数据 解决jQuery库先于其他库导入时变量“$”的使用权 解决jQuery库后于其他库导入时变量“$”的使用权 使用子查询优化选择器性能 减少对DOM元素直接操作 DOM对象与jQuery对象的类型转换 第11章 应用案例-聊天室系统 应用案例_图片切割

87,914

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧