2010-10-25 33 views
0

我已經得到了工作,像這樣的委託聲明:試圖添加層次約束委託()

$("body").delegate("tr[type='option']",'mouseenter',function(){ 

的問題是,它抓住從表我不想元素。所以,我想:

$("body").delegate("table[class='ms-MenuUI'] > tr[type='option']",'mouseenter',function(){ 

這是不是在所有工作(雖然我沒有得到任何控制檯錯誤)。只是想知道我怎樣才能收緊它,所以它只是從我想要的特定表中獲取表格行。

注意:該表在頁面加載時不存在於DOM中,並且在文檔準備好後動態創建/銷燬,因此需要委託開始。

編輯: 根據我下面的評論,我使用[]是因爲父項的屬性是可變的,我的理解是它們應該與短屬性(即'。')互換使用。動態代碼的示例爲:

$('body').delegate('table[' + parentAttribType + "='" + parentAttribValue + "'] > tr[" + rowAttrbType + "='" + rowAttribValue + "']"), 'mouseenter', function(){ 

謝謝!

回答

1

使用此方法,事件處理程序將'tr td'作爲其事件目標綁定到該表。

$('table[class=ms-MenuUI]').delegate('tr td', 'mouseenter', function() { 

}); 

僅供參考 -

如果你要使用$('body').delegate('',)那麼它可能是更好的使用.live()結合事件處理文檔級別反正。

編輯:對不起,沒有閱讀您的整篇文章,將事件委託給包含表格的元素,或者使用.live()。

+0

@John使用'live'永遠不會更好。 (1)它具有可怕的語法,(2)在進行授權時需要額外的選擇器。 – lonesomeday 2010-10-25 20:22:54

+0

這看起來是正確的解決方案。我不同意這個委託*總是*比現場好 - 這是一個設計約束和解決方案需要imo的問題... – patrickgamer 2010-10-25 20:43:53

+0

謝謝約翰,我要繼續前進() – patrickgamer 2010-10-25 20:45:04

1

您應該使用類類選擇.,而不是屬性選擇[]

$("body").delegate("table.ms-MenuUI > tr[type='option']",'mouseenter',function(){ 

而且,您的瀏覽器可能會引入tbody元素。如果可以,請刪除>

+0

這是強制性的嗎?我的示例是硬編碼的,但所選的屬性是動態的,並不總是類。使用[]允許我在選擇器中輕鬆地將屬性類型作爲變量傳遞,並且函數應該是相同的。我會用另一個例子更新。 – patrickgamer 2010-10-25 19:36:43

+0

是的,它應該工作,它只是醜陋的語法。我覺得'tbody'問題可能是你問題的原因。 – lonesomeday 2010-10-25 19:44:36

0

它應該工作:

$("table[class=ms-MenuUI] tr td").live('mouseenter',function(){ 
    /* yout code*/ 
}); 

活就像是綁定但它只是對DHTML。