2013-04-14 108 views
1

我有我的jQuery懸停小問題。我做我的個人頁面,我從AJAX加載我的數據。所以我不知道爲什麼懸停是竊聽。首先,我強硬,那是因爲我的元素是與位置是:絕對的,但後來我編輯它,並使它正常div.Here是我的代碼:jQuery懸停奇怪的bug

<td id="project" style="background: url('img/pctutorials-bg.png');background-repeat:no-repeat;background-position:center center;vertical-align:bottom;" > 
<div class="projectinfo" > 
<div class="text" >PCTutorials-BG</div> 
</div> 
</td> 

jQuery的

$(".projectinfo").hover(
    function() { 
    alert("Inside"); 
    }, 
    function() { 
    alert("Outside"); 
    } 
); 

可以這樣,因爲這是在頁面加載時不在頁面上的元素上。我以後用AJAX加載元素?

回答

1

您可以在當前和未來所有的元素像這樣重視mouseentermouseleave功能相當於mouseentermouseleave,所以hover不能直接與on一起使用。添加兩種功能懸停有點重要,所以最好分別使用mouseentermouseleave

我使用$('#project').on的原因是因爲性能。 jQuery必須搜索整個 DOM樹,每次創建內容時都會尋找.projectinfo節點,所以這會使jQuery只能在#project下查找。快多了。

+0

非常感謝您的明確解釋。 – Andrey

1

然後,你需要試試這個:

$(function() { 
    $('#project').on('mouseenter', '.projectinfo', function() { 
    alert("Inside"); 
    }).on('mouseleave', '.projectinfo', function() { 
    alert("Outside"); 
    }); 
); 

參考:http://api.jquery.com/on/

hover

$(document).on('mouseenter', '.projectinfo', function() { 
    alert("Inside"); 
}).on('mouseleave', '.projectinfo', function() { 
    alert("Outside"); 
}); 
+0

處理程序附加到jQuery對象中當前選定的元素,因此這些元素必須存在於對.bind()的調用發生時。 –

+0

這應該工作,對吧? –

+1

是的,但請參閱我的回答中關於表現的說明。 –