jQuery两个mouseenter事件,触发一个函数ONCE

时间:2012-01-24 18:16:35

标签: jquery bind mouseleave

我将一个mouseenter / mouseleave事件绑定到一个元素(只是一个图像),然后执行两个函数。我的问题是我希望两个函数中的一个只在第一个mouseenter上触发一次。

也就是在第一个mouseenter上发生了两件事,在第二个鼠标上只发生了一件事。

$(.bubbles).mouseenter(function(){
    functionSwapImage();                         //this should happen everytime
}).mouseleave(function(){
    functionSwapImageBack();                     //this should happen everytime
    $(".bubbles").one("mouseleave", function(){
        myFunction();                            //this should happen once!
    });
});

编辑:http://jsfiddle.net/Am5ZC/

如果我将.one函数移动到该块之外并进入其自己单独的鼠标进入/离开块,则functionSwapImageBack()仅触发一次(即.one正在删除两个块的事件)代码)。

不确定如何解决这个问题,但感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这应该有效:

$('.bubbles').one('mouseleave', myFunction)
.mouseenter(functionSwapImage)
.mouseleave(functionSwapImageBack);

不知道您是否要将其绑定到mouseleavemouseenter事件。

更新:它似乎在jQuery 1.7中正常运行,但在jQuery 1.7.1中无效。这似乎是一个错误。

答案 1 :(得分:1)

使用命名空间事件尝试此操作,该事件仅删除具有命名空间的特定事件处理程序。

$(".bubbles").mouseenter(function(){
    functionSwapImage();                         //this should happen everytime
}).mouseleave(function(){
    functionSwapImageBack();                     //this should happen everytime
}).one("mouseleave.onlyonce", function(){
    myFunction();                            //this should happen once!
});