2

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

aka 在第一个 mouseenter 上会发生两件事,在第二个 mouseneter 上只会发生一件事。

$(.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 正在删除两个代码块的事件)。

不太确定该怎么做,但感谢您的帮助!

4

2 回答 2

1

这应该有效:

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

不知道要不要绑定到mouseleaveormouseenter事件。

更新:它似乎在jQuery 1.7中可以正常工作,但在jQuery 1.7.1中不能正常工作。这似乎是一个错误。

于 2012-01-24T18:19:32.233 回答
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!
});
于 2012-01-24T18:19:50.247 回答