2010-01-07 43 views
3

我想使用live()方法將三個事件綁定到一個選擇器,但我似乎無法得到它的工作。如何使用jQuery live()在添加其他行後將多個事件綁定到所有錶行?

這裏是我到目前爲止,它的工作,直到我添加額外的錶行:

$("tr:has(td)").live('click',function(event){ 
     //do stuff 
}).live('mouseover',function(){ 
    $(this).toggleClass('highlight'); 
}).live('mouseout',function(){ 
    $(this).toggleClass('highlight'); 
}); 

一旦我添加額外的錶行,只有click事件的作品。如何在添加表格行之後讓所有三個事件都可以工作?

回答

4

在你的例子中,你要通過live().live().live()添加一個不是你想要的對象的live()。這是jQuery處理鏈接的方式。

你需要做的是:

var $o = $("tr:has(td)"); 
$o.live('click',function(event){ 
     //do stuff 
}); 
$o.live('mouseover',function(){ 
    $(this).toggleClass('highlight'); 
}); 
$o.live('mouseout',function(){ 
    $(this).toggleClass('highlight'); 
}); 

Here is an article on chaining

+2

只是爲了澄清,'活()'只能針對選擇直接運行(即'$(「選擇「).live()')這就是爲什麼你的代碼將工作,OP的代碼將無法工作。 (如果我的限制不會達到,我會+1) - 幾乎所有其他選擇器(包括事件)都可以鏈接,除了.live()' – 2010-01-07 15:35:01

+0

我試過了,它也不起作用。我只是粘貼了你的代碼,並且click事件起作用,但其他兩個不行(在我動態地添加錶行之後)。 – croceldon 2010-01-07 15:47:45

+0

會發生什麼?你有錯誤嗎?你有沒有試過顯示alert()來查看函數是否被調用(它可能只是你的highligh類被破壞)? – marcgg 2010-01-07 16:37:32

0

我認爲你必須做$("tr:has(td)").live()三次 - 你不能IT連鎖。

0

而不是使用live()您可以使用事件委託,這是更優雅的:

$('table').hover(function(e) { 
    $(e.target).closest('tr').addClass('highlight'); 
}, function(e) { 
    $(e.target).closest('tr').removeClass('highlight'); 
}) 
相關問題