4

我有以下 Javascript/jQuery 函数:

function addEventHandler(){

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

}

它有效,但并不完美。div 有时会稍微重叠(不要问),并且正如下图试图传达的那样,它们并不总是得到“Out”值。尤其是当我将指针快速移到它们上方时,会发生这种情况。

替代文字

任何想法如何确保每个 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();) - 然后交换回来mouseleave

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

现场示例:http: //jsfiddle.net/N9YAu/4/

希望这可以帮助。再次感谢!

4

3 回答 3

2

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

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

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

于 2010-11-26T11:06:50.977 回答
0

我无法重现该问题:

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

那里也发生在你身上吗?

于 2010-11-26T08:48:20.467 回答
0

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

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

于 2010-11-26T09:01:29.450 回答