2011-04-07 64 views
1

我有這樣的jQuery代碼:

$('*').mouseover(function() 
    { 
     $('#log').text($(this)[0].tagName); 
    }); 

並在我的網頁,我有一大堆的元素,並用ID 「日誌」 一個DIV。當用戶將鼠標移到任何元素上時,我希望他們的元素名稱(例如ph2)出現在#log中。但是每當我將鼠標懸停在任何東西上時,它都會返回HTML。我該如何解決?

+7

請注意'$(this)[0]'完全等同於'this',但速度較慢。 – nickf 2011-04-07 14:31:56

回答

6

嘗試:

$('*').mouseover(function(evt) 
{ 
    $('#log').text($(this)[0].tagName); 

    evt.stopPropagation(); 
}); 

你的問題,我認爲,是直到它擊中<html>而這也正是它停止的情況下被向上傳播鏈。這應該有所幫助。

編輯:它也可能有助於縮小範圍,即$('#container > *')

2

這是因爲這些事件都在冒着高達html的地方被處理。

嘗試......

$(document).mouseover(function(event) { 
    $('#log').text(event.target.tagName); 
}); 

現在只連接一個事件,讓他們都冒泡到document他們將在那裏進行處理。

+0

隨機downvote或有代碼的問題? – alex 2011-04-07 15:04:16

2

試試這個:

$('*').bind('mouseover', function(e) { 
    e.stopPropagation(); 
    $('#log').text($(this)[0].tagName); 
} 
0

文檔的第一個元素是HTML標記。所以它會得到第一個懸停命令。查閱 - 至少 - 爲身體元素。

-1

您通過選擇「*」將此事件處理程序附加到任意 DOM元素。 如果沒有event.stoppropagation()...每個動作都被路由到(向上!)html。

嘗試

$('*', 'body').mouseover(function() 
{ 
    $('#log').text($(this)[0].tagName); 
}); 

這限制了標籤的檢測,包含在身體的元件。

+2

這仍然會起泡到任何直接身體下的元素。我想他想要你徘徊的特定元素,所以你需要完全停止傳播 – brad 2011-04-07 14:38:00

+0

,brad。謝謝! – HBublitz 2011-04-07 15:19:57

1

問題是你的事件冒泡到html DOM節點......你不想要這個。這將解決這個問題:

$('*').mouseover(function(e){ 
    e.stopPropagation(); 
    $('#log').text(this.tagName); 
}); 
0

我創建了一個小提琴,以幫助您:http://jsfiddle.net/ErickPetru/NQfZh/

正如你所看到的,我建議你使用mouseenter insted的,那麼事件傳播將不會是一個問題。如果您使用mouseover,則鼠標始終會在每個元素及其父母上觸發此事件。

另外,.attr("tagName")更好,因爲您不需要任何[0]索引。