当使用子元素的mouseleave销毁子元素自身时如何不触发父元素的mouseenter事件

问题描述

在下有个问题想请教,还望指点。如下代码:<div id="div111" style ="width:200px; height :200px ; background :red; margin :100px auto auto 100px;" onmouseenter="mouseEnter(this.id);" onmouseleave="mouseLeave(this.id);"><div id="div222" style ="width:100px; height :100px; background :yellow;" onmouseenter="mouseEnter(this.id);" onmouseleave="mouseLeave(this.id);"><div id="div333" style =" width:50px; height :50px; background :blue;" onmouseenter="mouseEnter(this.id);" onmouseleave="destroySelf(this);" onclick ="destroySelf(this);"></div></div></div><p id="log"></p><script type ="text/javascript" > function mouseEnter(id) { $("#log").append(id+"触发了onmouseEnter事件<br/>"); } function mouseLeave(id) { $("#log").append(id + "触发了onmouseLeave事件<br/>"); } function destroySelf(obj) { $(obj).remove(); }</script>说明:这是嵌套的三层div。div111最外层,div222中间层,div333最内层。想要的结果是:当鼠标从div333移出(mouseleave)时,销毁(使用$().delete())自身(div333),但不能触发其父div(div111和div222)的mouseenter事件。请问如何实现???请发送答案至: njl_041x@163.com先谢过了。 问题补充:非常感谢你的回答,不过你有点偷梁换柱了。不是使用mouseover和mouseout事件,而是使用mouseenter和mouseleave事件axiheyhey 写道

解决方案

你用的什么浏览器?我在firefox下很正常,不过当点击删除的时候确实存在问题,这是mouseenter的实现机制所致,有兴趣可以去研究源码。下面放出最终版本,应该不会有什么问题了。<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript" src="jquery.js"></script> <style> #div111{ width:200px; height :200px ; background :red; margin :100px auto auto 100px; } #div222{ width:100px; height :100px; background :yellow; } #div333{ width:50px; height :50px; background :blue; } </style> </head> <body> <div id="div111"> <div id="div222"> <div id="div333"></div> </div> </div> <p id="log"></p> <script type ="text/javascript" > function mouseEnter(event){ var elem = $(event.target); if(!elem.hasClass('enter')){ elem.addClass('enter'); $("#log").append(elem.attr('id')+"触发了mouseenter事件<br/>"); } }; function mouseLeave(event){ var elem = $(event.target); if(elem.hasClass('enter')){ elem.removeClass('enter'); $("#log").append(elem.attr('id')+"触发了mouseLeave事件<br/>"); } }; /*$('#div111').hover(mouseEnter, mouseLeave); $('#div222').hover(mouseEnter, mouseLeave); $('#div333').hover(mouseEnter, function(event){ mouseLeave(event); $(this).remove(); });*/ $('#div111').mouseenter(mouseEnter); $('#div222').mouseenter(mouseEnter); $('#div333').mouseenter(mouseEnter); $('#div111').mouseleave(mouseLeave); $('#div222').mouseleave(mouseLeave); $('#div333').mouseleave(function(event){ mouseLeave(event); $(this).remove(); }); $('#div333').click(function(event){ event.stopPropagation(); $(this).remove(); }); </script> </body> </html>
解决方案二:
我怀疑你有没有真正测试我的代码? 鼠标从div333移出到div222或div111,div333销毁后会触发的是div333的mouseleave事件,谢谢!
解决方案三:
我怀疑你有没有真正测试我的代码?鼠标从div333移出到div222或div111,div333销毁后会触发的是div222或div111的mouseleave事件,谢谢!
解决方案四:
你这人还挺无聊,mouseenter和mouseover,mouseleave和mouseout的区别仅仅在于有没有冒泡,这种需求下放着冒泡不用,非要把代码写得一大堆你才舒服吗。。 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript" src="jquery.js"></script> <style> #div111{ width:200px; height :200px ; background :red; margin :100px auto auto 100px; } #div222{ width:100px; height :100px; background :yellow; } #div333{ width:50px; height :50px; background :blue; } </style> </head> <body> <div id="div111"> <div id="div222"> <div id="div333"></div> </div> </div> <p id="log"></p> <script type ="text/javascript" > function mouseEnter(elem){ var id = elem.id; $("#log").append(id+"触发了mouseenter事件<br/>"); }; function mouseLeave(elem){ var id = elem.id; $("#log").append(id+"触发了mouseLeave事件<br/>"); }; $('#div111').mouseenter(function(){ mouseEnter(this); }); $('#div222').mouseenter(function(){ mouseEnter(this); }); $('#div333').mouseenter(function(){ mouseEnter(this); }); $('#div111').mouseleave(function(){ mouseLeave(this); }); $('#div222').mouseleave(function(){ mouseLeave(this); }); $('#div333').mouseleave(function(){ mouseLeave(this); $(this).remove(); }); $('#div333').click(function(event){ event.stopPropagation(); $(this).remove(); }); </script> </body> </html> 这样写能满足你的欲望么?
解决方案五:
<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript" src="jquery.js"></script> <style> #div111{ width:200px; height :200px ; background :red; margin :100px auto auto 100px; } #div222{ width:100px; height :100px; background :yellow; } #div333{ width:50px; height :50px; background :blue; } </style> </head> <body><div id="div111"> <div id="div222"> <div id="div333"></div> </div> </div> <p id="log"></p> <script type ="text/javascript" > $(document).mouseover(function(event){var id = event.target.id;switch(id){case 'div111':case 'div222':case 'div333':$("#log").append(id+"触发了onmouseOver事件<br/>");break;}});$(document).mouseout(function(event){var target = event.target,id = target.id;switch(id){case 'div111':case 'div222':$("#log").append(id+"触发了onmouseOut事件<br/>");break;case 'div333':$("#log").append(id+"触发了onmouseOut事件<br/>");$(target).remove();break;}});$('#div333').click(function(event){event.stopPropagation();$(this).remove();});</script> </body></html>

时间: 2024-11-02 01:34:39

当使用子元素的mouseleave销毁子元素自身时如何不触发父元素的mouseenter事件的相关文章

JS子元素oumouseover触发父元素onmouseout

原文:JS子元素oumouseover触发父元素onmouseout JavaScript中,父元素包含子元素: 当父级设置onmouseover及onmouseout时,鼠标从父级移入子级,则触发父级的onmouseout后又触发onmouseover:从子级移入父级后再次触发父级的oumouseout后又触发onmouseover.而如果onmouseover内又应用了计时器便会存在较大的问题.下面针对此问题给出解决方案. 首先,在给出解决方案之前,必须先弄清楚几个对象及方法,分别如下: 1

iframe里面的元素触发父窗口元素事件的jquery代码

  top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, parent.document).trigger('topEvent'); 看似正确,实则误导人. 因为父窗口的jquery对象与iframe里面的jquery对象实际为两个对象(function),iframe里面的jquery并不会触发另一个jquery对象定义的事件.除非你在iframe这样定义了: iframe:

iframe里面的元素触发父窗口元素事件的jquery代码_jquery

例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, parent.document).trigger('topEvent'); 看似正确,实则误导人. 因为父窗口的jquery对象与iframe里面的jquery对象实际为两个对象(function),iframe里面的jquery并不会触发另一个jquery对象定义的事件.除非你在iframe这样

javascript-js:通过.parentNode 获得父元素,然后如何获得获得父元素的属性值?

问题描述 js:通过.parentNode 获得父元素,然后如何获得获得父元素的属性值? var imgDiv = document.getElementById(divID); var obj = imgDiv.parentNode; 这样获得imgDiv 的父元素,然后我想继续获得父元素的宽度和高度,求大神指点,谢谢 解决方案 你的obj就是父元素,用obj.width,obj.heigth 解决方案二: 少了style,obj.style.width. 解决方案三: 获取父元素之后,通过o

子元素scroll父元素容器不跟随滚动JS实现

一.开场暖身 网上常见蹲来蹲去的小段子,比方说:"李代沫蹲,李代沫蹲,李代沫蹲完黄海波蹲:黄海波蹲,黄海波蹲,黄海波蹲完宁财神蹲:宁财神蹲,宁财神蹲,宁财神蹲完张耀扬蹲;张耀扬蹲,张耀扬蹲,张耀扬蹲完郭美美蹲;郭美美蹲,郭美美蹲,郭美美蹲完--".应该源自"萝卜蹲,萝卜蹲,萝卜蹲完苹果蹲--". 在网页中,滚动条的滚动行为也是类似的调调,如果页面出现多个内嵌滚动条,则行为表现是:子元素滚,子元素滚,子元素滚完父元素滚:父元素滚,父元素滚,父元素滚完容器滚-- 比方说

js 阻止子元素响应父元素的onmouseout事件具体实现

 本文为大家介绍下js阻止子元素响应父元素的onmouseout事件,具体实现如下,感兴趣的朋友可以参考下  代码如下: $(".target-menu").mouseout(function(e){  evt = window.event || e;  var obj = evt.toElement || evt.relatedTarget;  var pa = this;  if(pa.contains(obj)) return false;  $(this).hide();  }

js与jquery获取父元素,删除子元素的两种不同方法

 本篇文章主要是对js与jquery获取父元素,删除子元素的两种不同方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使用js方法   var obj=$("#id");得到的是jquery对象,对该对象进行操作的时候使用jquery方法   1.对于上面获得的对象进行遍历   (1).js方法  for(vat i=0;j<obj

jquery查找父元素、子元素

 对使用js或者jquery查找父元素.子元素比较混淆的朋友可以参考下本文,因为是个人总结,用起来会比较方便 使用js或者jquery查找父元素.子元素经常遇到.可是用起来总容易混淆,这里统一总结了一下,以后用起来相信会方便好多    这里jquery向上查找父元素 用到的方法:closest() parents() parent()    向下查找子元素 用到的方法:find() children()    js用的是 children[] 属性    html代码   代码如下: <!DOC

javascript-用NVelocity+html中的#foreach自动生成的元素如何获取它的父元素和子元素?

问题描述 用NVelocity+html中的#foreach自动生成的元素如何获取它的父元素和子元素? 比如form中的表格中用#foreach自动生成行显示数据项,行的最后有修改/删除按钮,如何获取自动生成中的元素的值并传到服务器/在js中进行操作?如果无法实现,有什么替代方法? 解决方案 子元素过滤选择器(获取父元素中指定的某个子元素) 解决方案二: js的按钮事件传递this对象,this指向按钮这个dom,然后通过dom关系进行获取相关元素 如 <div>.....其他内....<