2012-01-24 56 views
2

我將一個mouseenter/mouseleave事件綁定到一個元素(僅僅是一個圖像),然後執行兩個函數。我的問題是,我希望這兩個函數中的一個只在第一個mouseenter上觸發一次。jQuery兩個mouseenter事件,觸發一個函數ONCE

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()只能觸發一次(即。一是刪除事件對於這兩個代碼塊)。

不太清楚該怎麼做,但感謝您的幫助!

回答

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! 
}); 
+0

看起來不錯,但你需要移動塊外的'one'功能。否則每當鼠標離開時它都會被綁定 –

+0

我是否必須編輯html?我該如何處理「onlyonce」命名空間?即'myFunction(){console.log(「good」); }'應該是什麼樣子? – jaredrada

+0

@BrianGlaz - 不錯的點就錯過了。 – ShankarSangoli

1

這應該工作:

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

不知道,如果你想將它綁定到mouseleavemouseenter事件。

更新:它似乎在jQuery 1.7正常工作,但不在jQuery 1.7.1。這似乎是一個錯誤。

+0

謝謝你felix king =] – jaredrada