2010-11-26 164 views
4

我有以下的Javascript/jQuery函数:的jQuery的mouseenter /鼠标离开HTML() - 交换问题

function addEventHandler(){ 

    $("div").mouseenter(function() { 
     $(this).html("Over"); 
    }).mouseleave(function() { 
     $(this).html("Out"); 
    }); 

} 

它的工作原理,但并不完美。 div有时会略微重叠(不要问),正如下面的图片试图表达的那样,它们并不总是得到“Out”值。特别是当我将指针移动到非常快时,会发生这种情况。

alt text

任何想法如何确保每个格沾到鼠标离开了“内外兼修”的价值?谢谢!

UPDATE:真正的代码摘录

由于我的真正功能并不像上面的例子一样简单,我已经包含在这里的真正功能的确切代码:

function addEventHandlers(){ 

    var originalContent = ""; 

    $(".countryspots div").mouseenter(function() { 

     var thisClass = $(this).attr("class"); 
     var thisCountry = thisClass.split(" "); 
     var thisNumber = getNumber(thisCountry[1]); 

     originalContent = $(this).children("a").html(); 

     $(this).children("a").html("<span>" + thisNumber + "</span>"); 


    }).mouseleave(function() { 

     $(this).children("a").html(originalContent); 

    }); 

} 

而我的HTML标记是这样的:

<div class="countryspots"> 
    <div class="america brazil"><a href="#"><span>Brazil</span></a></div> 
    <div class="america argentina"><a href="#"><span>Argentina</span></a></div> 
    <div class="europe ireland"><a href="#"><span>Ireland</span></a></div> 
    <div class="europe portugal"><a href="#"><span>Portugal</span></a></div> 
</div> 

总的想法是,在最内层国名10与代表mouseenter(取自getNumber();)的员工交换数字 - 然后在mouseleave上换回。

真正的问题是当我将指针移动到另一个div时,许多div保留其员工编号。换句话说:mouseleave事件不会在所有div上执行。

活生生的例子:http://jsfiddle.net/N9YAu/4/

希望这有助于。再次感谢!

回答

2

你的问题是,你只有一个变量来存储所有项目的“原始内容”,并且还可以在mouseleave处理程序之前调用mouseenter处理程序,从而导致值“original content”变量被悬停内容覆盖。

您应该在脚本的开始处一次存储原始内容,并将它们分别存储在每个项目中。我已经使用jQuery的data功能followign例子做到了这一点:http://jsfiddle.net/N9YAu/5/

NB,我曾与一个hover结合取代您的独立mouseenter/mouseleave绑定。最终可能是一样的,但这是做到这一点的“正确方法”。

0

我无法重现该问题:

http://www.jsfiddle.net/N9YAu/1/

是它发生在你那里吗?

+0

您的版本非常出色 - 我不会遇到同样的问题。然而,我的代码比上面简单的例子略高一点。我会马上更新这个问题... – o01 2010-11-26 09:09:32

+0

我已经在这里复制了这个bug:http://jsfiddle.net/N9YAu/4/ – o01 2010-11-26 10:43:01

0

这些div中的任何一个都会嵌套在HTML中的其他div中吗?

我在想,也许它可能与鼠标指针进入顶级div有关,然后在进入其他的时候不会“离开”,因为它们是顶级的子节点(即使它们已经绝对定位)。

+0

嗯,是的 - 种。我会很快更新这个问题。挂上... – o01 2010-11-26 09:09:56

相关问题