Jquery mouseover多次触发问题

引用自 http://lishuaishuai.iteye.com/blog/2338341

在Javascript中,父元素包含子元素,当给父元素设置onmouseover或onmouseout事件时,鼠标从父级移入子级的时候会多次触发onmouseover事件;鼠标从子级移入父级后再次移出的时候也会多次触发onmouseout事件。所以这个问题要解决,不然在以后的事例中出现很大的问题。

下面我们首先要熟悉几个对象与方法:

1)事件对象:

2)事件对象相关属性(只针对onmouseover与onmouseout):

  标签源:oEvent.fromElement(从哪里来的元素):兼容IE,Chrome

      oEvent.toElement(去哪里的元素):兼容IE,Chrome

      oEvent.relateTarget(相关元素):兼容FF 

3)判断一个元素是不是包含在另一个元素中的方法:元素.contains(Node) 

解决方法

1.mouseenter与mouseleave事件来代替onmouseover与onmouseout事件。

  这个原文提到兼容问题,但我在Jquery中查到有mouseenter与mouseleave事件。所以我就用了Jquery的mouseenter来代替,亲测IE8,FF,Chrome都用。

2.//------------------------------------------------------------
function contains(parentNode, childNode) 
{
    if (parentNode.contains) {
        return parentNode != childNode && parentNode.contains(childNode);
    } else {
        return !!(parentNode.compareDocumentPosition(childNode) & 16);
    }
}
function checkHover(e,target)
{
    if (getEvent(e).type=="mouseover")  {
        return !contains(target,getEvent(e).relatedTarget||getEvent(e).fromElement) && !((getEvent(e).relatedTarget||getEvent(e).fromElement)===target);
    } else {
        return !contains(target,getEvent(e).relatedTarget||getEvent(e).toElement) && !((getEvent(e).relatedTarget||getEvent(e).toElement)===target);
    }
}
function getEvent(e){
    return e||window.event;

}

//把以上代码copy,然后在onmouseover="abc(event,this)"

function abc(e, obj)

{

if(checkHover(e,obj)){

//..这里写你要做的事情即可。
        }

}

时间: 2024-10-09 23:30:22

Jquery mouseover多次触发问题的相关文章

jquery mouseover与mouseenter,mouserout与mouseleave的区别

mouseover与mouseenter不论鼠标指针穿过被选元素或其子元素,都会触发mouseover事件只有在鼠标指针穿过被选元素时,才会触发mouseenter事件 <!doctype html> <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="jquery-1.6.4.min.js">

解决jQuery中dbclick事件触发两次click事件

首先感谢这位小哥!http://qubernet.blog.163.com/blog/static/1779472842011101505853216/ 太长姿势了. 在jQuery事件绑定中,dbclick可以触发两次click事件.例如一个DOM元素div,既绑定了 click 事件,又绑定了 dblclick 事件,这两个事件分别要做独立的事情.事件处理上没有冲突,都可以各自完成各自的操作.双击的时候虽然是执行了 dblclick 事件,但是在这之前,也执行了click 事件,那么,如何来

jquery嵌套后会触发2次点击事件, jquery的unbind就是卸载这个点击事件的.

$("#diva").click(function(){ $("#divb").unbind("click").click(function(){ alert("www.lao8.org 提供代码."); }); }); jquery嵌套后会触发2次点击事件, jquery的unbind就是卸载这个点击事件的.

jQuery 嵌套 event 会触发多次的原因

Html代码如下: <div id="cover"> <input type="button" id="inside" value="submit_inside" /> </div> <div id="cover_js"> <input type="button" id="inside_js" value=&quo

jquery 自动调用和触发某个事件

我以点击事件为例,研究一下这个话题: jquery 自动触发点击事件 1.比如我们通过jquery定义了一个点击事件,我们如何自动触发他: $(function(){ $('#button').click(function(){ alert('button is clicking!'); }); }) 1)自动触发点击事件 $('#button').click(); 这大大出乎了 我的意料,我以为这样 会将之前的封装事件给覆盖掉了 其实没有.而是调用了里面的匿名函数, 这样我们就不难理解,为什么

jQuery mouseover与mouseenter,mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件.只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件.

jQuery动态添加元素无法触发绑定事件

用jquery动态添加元素后,发现给动态添加的元素无法触发事件.解决方案如下: 方法一:绑定live事件(live事件只在jquery1.9以下才支持,高版本不支持). 1 2 3 $(".newBtn").live("click",function(){ ///jquery 1.9(不包括1.9)以下可以                alert('这里是动态元素添加的事件');            }) 方法二:利用on()事件绑定 ($(ParentEle)

曾经跳过的坑----jQuery mouseover与mouseenter,mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave 不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件. 只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件. 在div里添加有子元素,刚开始使用mouseout ,结果每每都是鼠标还没放到刚显示出来的div上它就消失了,郁闷了半天改为le

jquery hover事件只触发一次动画

最近工作时遇到个关于动画的问题,如下: [javascript] view plain copy $("div").hover( function() { $(this).animate({"margin-top":"100px"},1000); }, function() { $(this).animate({"margin-top":"200px"},1000); }); 看代码就是一个简单的鼠标滑过的