`

ie6下js的onmouseover和onmouseout事件连续触发问题的解决方法

 
阅读更多

解决HTML内部元素的Mouse事件干扰

话说有一个DIV元素,其内部有一个IMG元素和SPAN元素,不用理会这两个内部元素怎么布局,这不是我要讨论的重点。

为了实现一些特殊的效果,我需要利用TD的onmouseover和onmouseout事件,测试时就会发现如下的状况:

当鼠标移入DIV内部时,onmouseover事件被触发;接着再鼠标移动到DIV内部的IMG或者SPAN元素之上,我们肯定不会认为这时鼠标已经移到了DIV的外边,但奇怪的是onmouseout事件触发了,而且紧接着onmouseover事件也马上被触发了。

这可不是我想要的,那么怎么来“屏蔽”内部元素给外层元素带来的Javascript事件干扰呢?

这里列举两种方法:

一. setTimeout

因为在鼠标移动到内部元素之上而触发了外层元素的onmouseout事件后,外层元素的onmouseover也会马上触发,所以我们只需要把外层元素的onmouseout事件需要执行的动作延迟很短的一段时间来运行,然后在onmouseover事件中再执行clearTimeout方法,这样就可以避免内部元素引起的事件干扰。

具体的执行过程请看下图(纵向的虚线表示时间):


这是个很巧妙的的方法,因为当onmouseout触发后,实质性的方法并没有马上执行,而是要等待一小段时间。如果在这段时间里马上又触发了 onmouseover事件,那么基本上就可以肯定onmouseout事件的触发是因为内部元素的干扰了,所以在onmouseover事件中使用 clearTimeout来阻止延时的方法执行。



二.contains

在onmouseover时先进行如下判断,结果为true时再执行方法体:

if(!this.contains(event.fromElement)){MouseOverFunc()}

在onmouseout时先进行如下判断,结果为true时再执行方法体:

if(!this.contains(event.toElement)){MouseOutFunc()}

下面来解释一下上面两行代码的含义:

在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。

event.fromElement指向触发onmouseover和onmouseout事件时鼠标离开的元素;event.toElement指向触发onmouseover和onmouseout事件时鼠标进入的元素。

那么上面两行代码的含义就分别是:

○ 当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;

○ 当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;

这样,内部元素就不会干扰外层元素的onmouseover和onmouseout事件了。

但问题又来了,非IE的浏览器并不支持contains函数,不过既然我们已经知道了contains函数的作用,就可以自行添加如下的代码来为非IE浏览器增加contains支持:

if(typeof(HTMLElement) != "undefined")

{

HTMLElement.prototype.contains = function(obj)

{

while(obj != null && typeof(obj.tagName) != "undefind")

{

if(obj == this)

Return true;

Obj = obj.parentNode;

}

return false;

};

}

分享到:
评论

相关推荐

    兼容ie和firefox的鼠标经过(onmouseover和onmouseout)实现--简短版

    在本篇文章中,我们将探讨如何使用CSS和JavaScript来实现兼容IE和Firefox的鼠标经过效果(onmouseover和onmouseout)。在前端开发中,鼠标经过效果是一个非常常用的交互效果,然而不同的浏览器对其支持的方式不同,...

    js触发事件大全

    JavaScript 是一种广泛用于网页和网络应用的脚本语言,它在网页交互中扮演着重要角色,其中事件处理是其核心功能之一。事件是用户或浏览器对页面进行操作时触发的特定情况,例如点击按钮、滚动页面等。本文将详细...

    onmouseover和onmouseout的一些问题思考

    本文将深入探讨两个常见的鼠标事件:`onmouseover`和`onmouseout`,以及它们在不同浏览器中的行为差异,以及如何解决由此引发的问题。 `onmouseover`事件会在鼠标指针进入一个元素时触发,包括进入该元素的任何子...

    兼容ie和firefox的鼠标经过(onmouseover和onmouseout)实现–简短版

    本篇文章将探讨如何实现一个简短的兼容IE和Firefox的鼠标经过事件(onmouseover和onmouseout)的解决方案。 首先,让我们了解这两个事件。`onmouseover`事件在鼠标指针进入一个元素时触发,而`onmouseout`事件则在...

    图片模糊化,支持FF/IE6以上

    - IE6并不支持CSS3,所以实现模糊效果可能需要用到像CSS Expression或者JavaScript的onMouseOver/onMouseOut事件来动态修改图片的样式。 3. onMouseOver与onMouseOut事件: - `onMouseOver`事件在鼠标指针进入...

    JS图片预览(兼容IE6、IE7、IE8和FF)

    在JavaScript(简称JS)中实现图片预览,尤其是在兼容老版本的Internet Explorer(如IE6、IE7、IE8)以及Firefox(FF)等浏览器上,需要考虑多种技术策略和兼容性问题。下面我们将详细讨论如何实现这个功能,并着重...

    javascript onmouseout 解决办法.docx

    这种方法通过自定义 `mouseleave` 事件处理器来解决 `onmouseout` 事件过度触发的问题。其核心思想是在 `onmouseout` 事件触发时检查目标元素与鼠标移入的新元素之间的关系,只有当鼠标移入的元素不是目标元素的后代...

    javascript中onmouse事件在div中失效问题的解决方法

    本文探讨了在使用JavaScript处理鼠标事件时,在div元素中可能会遇到的onmouseout事件失效的问题,并提供了兼容IE和Firefox两种浏览器的解决方案。在探讨之前,需要了解几个基础知识点: 1. JavaScript事件冒泡:当...

    javascript鼠标事件大全

    在JavaScript编程中,鼠标事件是非常重要的交互元素之一,它们允许开发者捕捉用户的鼠标动作,并根据这些动作触发相应的脚本处理。本文将详细介绍JavaScript中的各种鼠标事件及其特性,包括支持的浏览器版本等内容。...

    JS鼠标键盘触发函数大全

    ### JS鼠标键盘触发函数大全知识点解析 #### 一、鼠标事件 鼠标事件是JavaScript中最常见的交互方式之一,它们主要用于响应用户的鼠标操作。 - **`onClick`**:当用户单击鼠标左键时触发。该事件通常用于处理点击...

    javascript解决IE6下hover问题的方法

    在JavaScript代码中使用了attachEvent方法,这是因为IE6仅支持attachEvent用于添加事件监听器,而不支持标准的addEventListener方法。同时,代码中也使用了正则表达式来清理类名,确保在移除"stest"时不会影响到元素...

    JavaScript程序设计——事件处理实验报告.docx

    - **鼠标事件**:如`onclick`(点击)、`onmousedown`(鼠标按下)、`onmouseup`(鼠标释放)、`onmousemove`(鼠标移动)、`onmouseout`(鼠标离开元素)和`onmouseover`(鼠标进入元素)。 - **Event对象**:...

    js事件总结

    onMouseOver IE3|N2|O3 当鼠标移动到某对象范围的上方时触发的事件 onMouseMove IE4|N4|O 鼠标移动时触发的事件 onMouseOut IE4|N3|O3 当鼠标离开某对象范围时触发的事件 onKeyPress IE4|N4|O 当键盘上的某个键被按...

    JS中包涵的事件分类

    为了更好地理解和应用JS事件,本文将详细介绍JS中的各种事件及其应用场景。 #### 1. 鼠标事件 (Mouse Events) 鼠标事件是用户与网页交互时最常见的一类事件。它们主要涉及鼠标的各种操作,如点击、移动等。 - **...

    js事件大全汇总111

    本文档汇总了广泛使用的JavaScript事件及其触发条件,并提供了详细的解释,帮助开发者更好地理解和应用这些事件。 #### 二、鼠标事件 1. **`onClick`**:当用户点击一个元素时触发。 - 支持版本:IE3 | Netscape2...

    JS事件大全

    ### JS事件大全:深入解析与兼容性探讨 在前端开发领域,JavaScript事件处理是构建交互式用户界面的核心技术之一。本文旨在全面解析JavaScript中的各种事件类型及其对应的浏览器兼容性,帮助开发者更好地理解和应用...

    js鼠标事件大全(事件说明)

    ### JS鼠标事件大全详解 JavaScript 是一种广泛应用于网页开发中的脚本语言,它能够通过处理各种事件来增强页面的交互性。其中,鼠标事件是非常重要的一部分,它们允许开发者响应用户的鼠标操作,比如点击、移动等...

    JavaScript每天必学之事件

    在JavaScript中,事件处理程序一般以“on”开头,如onclick、onmouseover、onmouseout等。事件处理程序的命名约定帮助开发者快速识别出哪个函数负责处理哪种类型的事件。 接下来,我们来理解什么是事件冒泡和捕获。...

    Javascript鼠标事件大全

    3. **onMouseDown(按下事件)**: - **描述**:当鼠标按钮被按下时触发。 - **示例用途**:可以用于实现拖拽功能。 - **兼容性**:IE4及以上版本、Netscape4及以上版本、Opera支持。 4. **onMouseUp(抬起事件...

Global site tag (gtag.js) - Google Analytics