2012-10-18 99 views
0
$(".hovertip").parent().on('hover', function() { 
    alert('yay'); 
}); 

我想得到像上面這樣的工作,如.live(),以便它捕獲對DOM的動態更改。jQuery .on()與.parent()和動態選擇器

我想這樣的事情...

$(".hovertip").on('hover', $(this).parent(), function() { 
    alert('yay'); 
}); 

但它似乎沒有工作...

注意 - 這是jQuery Live traversal parent() selector的延續與addresessed。對()。 parent()但動態DOM更改問題未解決。


更新:

感謝您的建議...

我有麻煩仍然得到這個代碼執行的功能動作時,工作現場,並讓他們像.live工作時DOM改變。例如......(這不,當DOM改變工作)...

$(".hovertip").parent().on('mouseenter', function() { 
    var hovertipParentHeight = $(this).outerHeight(); 
    $(this).find(".hovertip").css("top", (hovertipParentHeight-hovertipHeight)/2 + "px"); 

我認爲這個問題是如果我要實現的建議解決方案,我仍然需要$(本)。父()的主要選擇之前是一個回調和它似乎並不.parent()支持回調:http://api.jquery.com/parent/

例如:

$('.hovertip').on('hover', function(){ 
    $(this).parent(function() { 
    var hovertipParentHeight = $(this).outerHeight(); 
    $(this).find(".hovertip").css("top", (hovertipParentHeight-hovertipHeight)/2 + "px"); 
... 

});

不起作用。

+0

您是否閱讀過文檔? – undefined

+0

是的,我已閱讀文檔。顯然,如果您將接收器指定爲第二個參數,則更改是動態的。但是,使用$(this).parent它不起作用。 http://api.jquery.com/on/ –

+1

你想達到什麼目的?事件應從哪個元素進行委派? – undefined

回答

1

你的錯誤是,在this選擇(二)參數並不是指.hovertip。

如果你想趕上在.hovertip元素的每個父事件中,你可以做這樣的:

$('.hovertip').parent().on('hover', '.hovertip', function(){ 
    alert('yay'); 
}); 

如果父母都應該使用@馬特斯通的解決方案相同的類。

更新:我剛纔看到你的答案上其他職位:。

$( 「hovertip」)父()上( '懸停',函數(){警報('耶');});工作,不幸的是,一旦頁面通過AJAX刷新,它停止工作。

這是因爲當附加事件處理程序的元素(在您的情況下,.hovertip元素的父項)被替換時,它停止工作。

我建議你給所有應該得到懸停事件處理程序(.hovertip的所有父元素)的元素提供一個類。然後它很容易

例如: $('body')。on('hover','.hovertip',function(){});

+0

謝謝托馬斯,我想保留函數一般來尋找.parent()元素。這是一個應用程序範圍的功能。 –

+1

然後,您可以在每次進行AJAX調用時重新附加該事件。 – Thomas

1

.on()(和舊的.live())通過監聽源自他們孩子的冒泡事件來工作。您可以愉快地添加/刪除子元素,知道父母仍然在聽。

考慮到這一點,將.on()綁定到不會更改的父元素。你可以像綁定到document一樣高。

$(".highest-level-container").on('hover', '.hovertip', function() { 
    console.log($(this).parent()); 
}); 
+0

感謝馬特,我不想獲得一個名爲.parent的類,我試圖獲得hovertip類的父元素。 –

+0

當然。這個概念仍然是你應該將.on()綁定到最接近可能包含所有.hovertip元素的父對象。 –