jQuery mouseenter / mouseleave html() - 交换问题

时间:2010-11-26 08:37:05

标签: javascript jquery mouseleave mouseenter

我有以下Javascript / jQuery函数:

function addEventHandler(){

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

}

它有效但不完美。 div有时会略微重叠(不要问),并且如下图所示,它们并不总是得到“Out”值。特别是当我将指针快速移动到它们上面时会发生这种情况。

alt text

如何确保每个div在mouseleave上获得“Out”值?谢谢!

更新:真实代码摘录

由于我的实际功能并不像上面的例子那么简单,我在这里包含了真实函数的确切代码:

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>

一般的想法是,最内层<span>中的国家/地区名称与代表mouseenter上的员工的号码(从getNumber();检索)交换 - 然后换回{{1 }}

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

实例: http://jsfiddle.net/N9YAu/4/

希望这会有所帮助。再次感谢!

3 个答案:

答案 0 :(得分:2)

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

您应该在脚本开头存储一次原始内容,并为每个项目分别存储它们。我使用jQuery的data函数在关注示例中完成了此操作:http://jsfiddle.net/N9YAu/5/

注意,我已使用一个mouseenter绑定替换您单独的mouseleave / hover绑定。它最终可能是相同的,但这是“正确的方法”。

答案 1 :(得分:0)

我无法重现这个问题:

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

它也发生在你身上吗?

答案 2 :(得分:0)

这些div中的任何一个是否可以嵌套在HTML中的其他div中?

我想也许这可能与鼠标指针进入顶级div有关,然后在进入其他部分时没有“离开”因为它们是顶级的孩子(即使它们已被定位)绝对)。