2010-11-26 89 views
4

我有以下的Javascript/jQuery函數:的jQuery的mouseenter /鼠標離開HTML() - 交換問題

function addEventHandler(){ 

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

} 

它的工作原理,但並不完美。 div有時會略微重疊(不要問),正如下面的圖片試圖表達的那樣,它們並不總是得到「Out」值。特別是當我將指針移動到非常快時,會發生這種情況。

alt text

任何想法如何確保每個格沾到鼠標離開了「內外兼修」的價值?謝謝!

UPDATE:真正的代碼摘錄

由於我的真正功能並不像上面的例子一樣簡單,我已經包含在這裏的真正功能的確切代碼:

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> 

總的想法是,在最內層國名10與代表mouseenter(取自getNumber();)的員工交換數字 - 然後在mouseleave上換回。

真正的問題是當我將指針移動到另一個div時,許多div保留其員工編號。換句話說:mouseleave事件不會在所有div上執行。

活生生的例子:http://jsfiddle.net/N9YAu/4/

希望這有助於。再次感謝!

回答

2

你的問題是,你只有一個變量來存儲所有項目的「原始內容」,並且還可以在mouseleave處理程序之前調用mouseenter處理程序,從而導致值「original content」變量被懸停內容覆蓋。

您應該在腳本的開始處一次存儲原始內容,並將它們分別存儲在每個項目中。我已經使用jQuery的data功能followign例子做到了這一點:http://jsfiddle.net/N9YAu/5/

NB,我曾與一個hover結合取代您的獨立mouseenter/mouseleave綁定。最終可能是一樣的,但這是做到這一點的「正確方法」。

0

我無法重現該問題:

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

是它發生在你那裏嗎?

+0

您的版本非常出色 - 我不會遇到同樣的問題。然而,我的代碼比上面簡單的例子略高一點。我會馬上更新這個問題... – o01 2010-11-26 09:09:32

+0

我已經在這裏複製了這個bug:http://jsfiddle.net/N9YAu/4/ – o01 2010-11-26 10:43:01

0

這些div中的任何一個都會嵌套在HTML中的其他div中嗎?

我在想,也許它可能與鼠標指針進入頂級div有關,然後在進入其他的時候不會「離開」,因爲它們是頂級的子節點(即使它們已經絕對定位)。

+0

嗯,是的 - 種。我會很快更新這個問題。掛上... – o01 2010-11-26 09:09:56

相關問題