关键词:
【中文标题】如何在 Javascript 中移动子元素时触发一次鼠标事件?【英文标题】:How to fire mouse event once for moving over child elements in Javascript? 【发布时间】:2012-06-27 11:54:41 【问题描述】:当输入一个 DOM 元素时,mouseover
事件将会发生。在当前元素周围移动鼠标时,不会发生任何事件,因为mouseover
用于输入。
但是,子节点不遵守此规则。如果将鼠标移到子节点上,mouseover
事件将一次又一次地触发,虽然没有新的事件,因为我们仍然在原来的父节点中。
看到这个example。如果我们将鼠标移到父元素上(实际上是在它的 textNode 上),没有任何新的事情发生,但是如果我们转到子元素(仍然在父元素上),它将一次又一次地触发 mouseover
事件。事实上,它会在鼠标每次进入元素时触发鼠标事件(即使在原始父元素内)。
我们如何使mouseover
只移动一次以在整个父级(addEventListener
中的原始元素)上移动?在给定的示例中,我的意思是避免在子元素上移动鼠标时触发事件。
【问题讨论】:
【参考方案1】:这在 chrome 和 ff 中对我有用
document.getElementById("parent").addEventListener('mouseover', function(event)
var e = event.fromElement || event.relatedTarget;
if (e.parentNode == this || e == this)
return;
document.getElementById("time").innerHTML = new Date();
, true);
Fiddle Demo
参考:Mouse Events
【讨论】:
【参考方案2】:您真正需要的是mouseenter
事件,它不会冒泡(与mouseover
不同)。来自 MDN:
同步 mouseenter DOM 事件在鼠标或 另一个指点设备进入分配给元素的物理空间 或其后代之一。
与 mouseover 类似,不同之处在于 不会冒泡 和 当指针从其后代之一移动时不会发送它 物理空间到它自己的物理空间。
不幸的是,它是not widely supported。一种解决方案是使用 jQuery(参见 .mouseenter()
),它在它支持的所有浏览器中填充该事件。另一种选择是检查触发事件的元素:
document.getElementById("parent").addEventListener('mouseover', function(e)
if (e.target.id === "parent") //Only execute following on parent mouseover
document.getElementById("time").innerHTML = new Date;
this.childNodes[1].style.display="block";
, false);
或see here 乍一看是一个相当不错的垫片。
【讨论】:
mouseenter
事件只针对 IE,我说的是纯 JS,不是 jQuery 框架。
@Ali - mouseenter
实际上在规范中,现在在 Firefox、IE 和 Opera 中得到支持。希望其他浏览器能尽快赶上。
但它仍然很快被用作流行事件,大多数用户(包括我)使用webkit浏览器。
@Ali - 同意,我也使用 WebKit 浏览器。我已经通过链接更新了我的答案,该链接指向一篇似乎有很好垫片的文章。我建议尝试一下。【参考方案3】:
在您的示例中,子元素没有触发任何事件,它是您的父元素,当您将鼠标悬停在其上时,它会运行您的脚本并在您的“时间”div 中显示结果。
【讨论】:
进入子元素会触发事件,因为我们还没有离开父元素。 @Ali 但脚本在 id 基础上运行。阻止 Javascript 事件影响子元素
】阻止Javascript事件影响子元素【英文标题】:StopJavascripteventfromaffectingchildelements【发布时间】:2012-08-1602:47:23【问题描述】:我有一个创建元素的脚本,创建过程的一部分是添加一个onclick事件(使用addEventListener),但是当我点... 查看详情
如何禁用由子元素触发的 mouseout 事件?
】如何禁用由子元素触发的mouseout事件?【英文标题】:Howtodisablemouseouteventstriggeredbychildelements?【发布时间】:2010-09-2522:11:07【问题描述】:让我详细描述一下这个问题:当鼠标悬停在一个元素上时,我想显示一个绝对定位的div... 查看详情
javascript---鼠标事件
1、基本鼠标事件:mouseenter:当鼠标移入某元素时触发。mouseleave:当鼠标移出某元素时触发。mouseover:当鼠标移入某元素时触发,移入和移出其子元素时也会触发。mouseout:当鼠标移出某元素时触发,移入和移出其子元素时也会... 查看详情
javascript中ondragover是啥事件
...技术A在元素正在拖动到放置目标时触发HTML中:尝试一下JavaScript中:object.ondragover=function()myScript;尝试一下Java 查看详情
jq在iframe中点击按钮,父元素触发事件
...现 方法如下: 当在段落上按下鼠标按钮时执行一段JavaScript: <ponmousedown="mouseDown()">请点击此文本!</p> 定义和用法 onmousedown属性在鼠标按钮在元素上按下时触发。 提示:相对于onmousedown事件... 查看详情
js中鼠标移动事件触发时,如何获得当前鼠标在哪一个元素上
..."><head><title></title><scripttype="text/javascript">functioninit()document.body.onmousemove=function(e)if(!e)e=window.event;elsee.srcElement=e.target;document.getElementById("divDebug").innerHTML="mousemove("+e.clientX+","+e.cl... 查看详情
mouseover和mouseout事件在鼠标经过子元素时也会触发
JavaScript的mouseover和mouseout事件,在绑定元素内部有子元素的情况下,经过绑定元素时会多次触发mouseover和mouseout事件。jQuery解决办法:jquery的mouseenter和mouseleave方法已经修复了这个问题,可以直接用来替代mouseover和mouseout不过有个mo... 查看详情
事件与事件流
一、什么是事件与事件流 1、众所周知,HTML与JavaScript的交互是由事件驱动的,我们定义在某个时刻调用某个事件来完成页面的交互。HTML页面就是一个DOM树,当一个元素调用 一个事件时,该事件会在结点与结点之... 查看详情
拖动子元素时触发 Svelte 可拖动,onleave 事件
】拖动子元素时触发Svelte可拖动,onleave事件【英文标题】:Sveltedraggable,onleaveeventtriggeredwhendraggingoverchildelements【发布时间】:2021-06-1803:45:03【问题描述】:我有一个元素,当我使用dragenter事件在其上拖动第二个元素时突出显示... 查看详情
在 Div 中添加子元素时,虽然使用 UseEffect 触发,但到达 useRef() 当前属性返回未知
】在Div中添加子元素时,虽然使用UseEffect触发,但到达useRef()当前属性返回未知【英文标题】:ReachuseRef()CurrentpropertyreturnunidentifiedthoughusingUseEffecttofirewhenaddingachildelementinsideaDiv【发布时间】:2021-10-1713:38:34【问题描述】:我是反... 查看详情
如何使用 JavaScript 将所有 HTML 元素子元素移动到另一个父元素?
】如何使用JavaScript将所有HTML元素子元素移动到另一个父元素?【英文标题】:HowtomoveallHTMLelementchildrentoanotherparentusingJavaScript?【发布时间】:2014-01-2112:09:18【问题描述】:想象一下:<divid="old-parent"><span>Foo</span><b... 查看详情
如何在javascript中更新子数组元素
我试图在javascript中更新嵌套的数组元素。想要将日期转换为不同的格式。我如何更新嵌套元素array1=[{"week":["2019-05-06T16:00:00.000Z","2019-05-07T16:00:00.000Z","2019-05-08T16:00:00.000Z","2019-05-09T16:00:00.000Z","2019-05-10T16:00:00.000Z", 查看详情
每日分享!javascript的鼠标事件(11个事件)(代码片段)
鼠标的11个事件具体的事件解释如下:click:按下鼠标(通常是按下主按钮)时触发。dblclick:在同一个元素上双击鼠标时触发。mousedown:按下鼠标键时触发。mouseup:释放按下的鼠标键时触发。mousemove:当鼠标在一个节点内部移... 查看详情
如何获取 javascript/jQuery 中最高子元素的高度?
】如何获取javascript/jQuery中最高子元素的高度?【英文标题】:Howtogetheightofthehighestchildrenelementinjavascript/jQuery?【发布时间】:2010-11-0718:06:26【问题描述】:我需要一个函数来获取div内最高元素的高度。我有一个包含许多其他元素... 查看详情
如何将事件绑定到元素和所有子元素但只触发一次?
】如何将事件绑定到元素和所有子元素但只触发一次?【英文标题】:Howtobindeventtoelementandallchildrenbutonlyevertriggeritonce?【发布时间】:2015-04-2206:29:25【问题描述】:这就是HTML的样子:<ahref="#"id="back-button"data-transition="slide"data-dir... 查看详情
浏览器关闭时如何触发jQuery [重复]
...【发布时间】:2012-01-0803:49:51【问题描述】:可能重复:javascriptdetectbrowserclosetab/closebrowser有人知道在javascript/jQuery中监听窗口关闭事件的可靠方法吗?窗口是父实例,而不是任何子实例。IE。如果一 查看详情
移动端touchstartouchmovetouchend事件如果页面有滚动时不让触发touchend事件。
...素,则取消后续事件监听函数的执行。*/<scripttype="text/javascript">functionmakeTouchable 查看详情
事件类型——鼠标事件(代码片段)
...上click=mousedown+mouseup)mouseenter:鼠标光标从元素外部首次移动到元素范围之内时触发。该事件不冒泡,而且移动到后代元素上不触发。DOM3级事件。(IE、Firefox、Opera)mouseleave:位于元素上方的鼠标光标移动到元素范围之外的时... 查看详情